FAQ on License

Many users asked about license options. Here are my answers for the most frequent questions:

Q: Do I need an Autodesk account to use the app?

A: For paid apps, yes. Every end user needs login in Revit using an Autodesk account, and the app will check the account’s available license before running. The license can be obtained either directly from purchase, or from redistribution from another Autodesk account.

Q: I am a BIM manager, I purchased multiple copies of your app. How do I assign my end users these licenses?

A: See this page’s “Multi-seat license distribution”


Three things to note:

1, You can only redistribute one seat to one user account. Transferring of multiple seats is not possible.

2, Once an end user downloads a copies, one seat is permanently bond to that user’s account.

3, There must be at least one seat remaining on your purchasing account.

Example: you purchased 10 copies of app X, using account Admin, and there are 10 seats under Admin. You send user A a link to let her download app X. Once she downloads app X, 1 seat is considered “consumed”, and that seat is permanently under user A’s account. Now the admin account will have 9 seats. You can redistribute up to 9 seats to 9 end users accounts, leaving minimum of 1 seat under admin account, which is a limitation from the App Store. If the admin account is not one of the end user, and you have 10 end users needing license, as a work around I can manually give you 1 extra seat for redistribution.

Q: I want to use one account for purchasing, and another for management. Is it possible?

A:  Yes there is a way to do that. Instead of purchasing in App Store, you can email me the quantity of seats you need, and the account you want to use to redistribute these seats to end users, I will give you those seats, and send an invoice to the person/account for purchasing.

Q: Is there a floating license option?

A: Sorry, the only options are mentioned above.



Revit Plugin:User Editing History


User Editing History (Trial)

User Editing History

The “Edited By” property provided by Revit is a great feature for internal modeling coordination, so good that it makes people wonder if it could be even better. Most of Revit end user must have experienced this: you come to work in the morning, open the model, go to a view to start your well-planned working day, only to find out that some doors are missing, some walls have moved, which kind of ruined your previous day’s masterpiece design. The worst part is, you don’t know who was the irresponsible culprit to yell at, so you send out an email yelling at all your teammates to remind them to be responsible and communicative. Some of your teammates are nice enough to provide vocal support, others remain silent, hopefully also thinking about whether  he/she did the editing. You feel the same thing shouldn’t happen again after this email, and it didn’t, until three days later. This time you definitely need to find the person, but how? Who to start with? Indeed, you wouldn’t spend too much of your brain power on this kind of political decision if you are in  a healthy enough team, but the reality is most often not as good as your perfect world.

The person who did the change is most often newbies to collaborated working environment in Revit, but sometimes even experienced users could do that, just because of the complexity and inter-connectivity of a Revit model.

Could there be a “Last Edited By” property for every element, so we can directly find the right person without any guessing or group-email-over-killing. Or could it be even better, to have a complete history of who edited this element and when was the change saved? The most intuitive and reasonable way to achieve this, if Revit API allows, is to tell the central model to take a note whenever an element is checked out by the user. To my knowledge, Revit API does not allow direct/separate control of the central model. Also, Revit API does not provide “checking out” event for plugin to response to. In terms of performance impact, my solution is not as perfect as this imaginary route, but it is still good enough to achieve the end result without sacrificing much local performance.


The user of this plugin probably cares about what exactly happens behind the scene, and I am providing the technical detail now. Whenever there is a “transaction” – user action that results in change in the model – happening, Revit API allows access to three lists of element ids, which are elements that have been created, modified or deleted during this transaction. End User Assistant plugin (not this plugin) will temporarily record these lists of ids in RAM, for every transaction a user initiated. Whenever the user does a SAVE or SYNC , the plugin will first eliminate duplicated ids, then save them permanently into Revit file by creating a Data Storage element and then write history data into it. A Data Storage element a special element type that is only visible to Revit API, and its intention is to store external data for plugins. Every user will have his/her own Data Storage element so there will be no checking out conflict. Till now, all the job have been done by End User Assistant plugin. The reason of using a separate plugin is to ensure minimum performance impact.


What this plugin does is simply reading data from all users Data Storage elements, rearrange by time, and show the history in a table. It provides several filters to manage the displaying history data, and we can decide the way to combine these filters. To make tracking down history of individual element as easy as possible, the plugin will automatically update displaying data according to current Revit selection. In other words, if you just want to see the history of one specific element, simply select that element while the plugin is running, and the plugin will show only the history of that element.


Deleted Elements

The most notable and unsolvable issue of this plugin is the history of deleted elements. Revit API only provide Element Id information of a deleted element, and the End User Plugin can only record what Revit provides. There are ways, of course, to work around this limitation and get other information such as name and category, but will be at the expense of performance. Therefore, End User Plugin will only record Element Id, and leave everything else blank. This plugin will be able to show the Id, the time frame during which the element was deleted, and show everything else as “N/A”.

Performance Impact

Another issue is the impact to the performance. The actual impact can be easily checked using End User Assistant. Every time it does anything, it records the time needed for it to do whatever it needs to do in the background. All the time records during an open Revit session are showed in a table, so the end user can decide whether needs to turn off one or more functions. The real-time recording of created/modified/deleted elements’ ids is probably the easiest thing a computer can do, so it is almost instant (should be showing 0.000 seconds). The permanent recording into Revit file is slightly less easy, but it only involves modification of only one element that is not connected to anything else in the model, so the time needed should also be close to nothing.

File Size Increase

Although one history item is pretty simple and only stores very minimum amount of data, the inter-connectivity of a Revit model means an editing to one element initiated by the user will often result in changes of many other related elements. Even though the plugin will eliminate all the duplicates before writing into the file, the amount of data will quickly accumulate, especially when the project is complex and there are a large team working on it. The good news is that the amount of stored data will not impact the performance, nor the time for loading the file since the data storage is always invisible. It will only impact the time for the plugin to filter through all the data and display those we want to see. This is another thing that a computer is best at, and I noticed minimum impact when I tested the plugin with a million randomly-generated history items.

Although it does not impact performance, most of time we don’t need to have a million history items reside in the model, while what we really need is just the most recent history items. This plugin lets you delete all items at once. You can use this function right after archiving your file, so the history data stays in the archived model.


As always, suggestions for future releases are most welcomed. Feel free to contact me if you want specific function in the plugin, or if your firm has special demands that could be best met by a more customized tool.


Special thanks to Ryan Borszich, for his ideas and suggestions on the development of this plugin.

Revit plugin: End User Assistant


End User Assistant

The purpose of this tool is to provide assistance for successful implementation of other tools. At the time of this initial release, it works with the other 2 plugins from DZ studio: Revision Cloud Manager and User Editing History. There will be more tools coming in the future, and this plugin’s functionality will expand as needed.


A. Revision Cloud Monitor:

a.User Prompt:

make sure the user is aware that he/she needs to use the “Comments” property of revision cloud to describe what this cloud is about, so Revision Cloud Manager can use the info to generate a narrative.

B. User Editing History

a. History Recorder

It will record all the added/modified/deleted Revit elements between two saves/syncs. It will store the data into a user-specific data element in the project file. The data it collects and stores are basic information such as element name, category, id, time, etc. The stored data is accessible from either this plugin, or from User Editing History plugin.

KNOWN ISSUE: deleted element only has its Element Id information available. If you really want to track down when and how an element was deleted and your archived model has that element, find the element id in your archived model, search in your current model using the same id. Most of the time, element id does not change, but Revit does change it once in a while. Therefore, this plugin cannot guarantee 100% correct history for a deleted element.

b. History Viewer

User can view his/her own history records in the Revit file, so he/she understands what information has been collected.

C. Performance Impact

This allows user to monitor the time spent each time this plugin execute a task, to make sure this plugin has minimum impact on Revit’s performance.


No one wants an additional icon in Revit, especially it cost a little bit of time to load when Revit starts. The reason behind keeping this helper tool separate from other tools that it is supporting, is to ensure minimum performance impact. Unlike other tools, this one is constantly running in the background and monitoring Revit transaction done by the user. We don’t want to have 10 monitors from different tools running for their individual purpose, but rather just one monitor that run and gathers all the info needed all at once.


As always, suggestions for future releases are most welcomed. Feel free to contact me if you want specific function in the plugin, or if your firm has special demands that could be best met by a more customized tool.

Revit plugin: Revision + Cloud Manager

Screenshot (3)Screenshot (2)01Screenshot (5)


This is a one-stop solution for managing revision clouds and revisions in Revit. It is one of the most popular paid apps in Autodesk App Store. Give it a try!

I am constantly updating my products in response to user’s feedback. Don’t hesitate to contact me if you have any questions or problem using the tools, as well as any comments and suggestions. Your feedback is most welcomed!

Revision + Cloud Manager (Trial)

Revision + Cloud Manager

Other products of DZ Studio

FEATURE BLOCK – Revision Cloud Manager

This plugin finds all revision clouds in the model, group them by revision, let the user select the revision(s) to show in a table. By right-clicking on the column header, it allows selecting which properties need to be shown. It collects all necessary information directly from Revit model, and let the user export the table as Excel file.

Using Cloud’s Comments

This plugin can read and write “Comments” property. End User Assistant plugin can remind Revit user to write something into Comments property as a description. FYI, Comments property supports multiple lines text. To achieve that, type some lines in notepad/Word, then copy-paste it into Comments property. The plugin supports multi-line-text too. Similar to Excel, you need to press Shift + Enter to enter  a new line.

Export to Excel

Export all clouds and selected properties as an Excel table.

Clouds on Sheet

If there is cloud on sheet, please run “Verify Detail Number” at least once to get the correct result. More is explained in “Issues” later.

Clouds in Dependent View

If there is any dependent views that has cloud in it, please run “Verify Visibility” to get the correct result. More is explained in “”Issues” later.

Last Edited By

From version 1.1.0, this plugin can read the history data collected by End User Assistant plugin, and show the user who did the last editing to a cloud.

“View Title” Parameter

This parameter is a combination of “Title On Sheet” and “View Name”. It will show “Title On Sheet” if possible, otherwise “View Name”, so it is consistent with what’s showing on sheet.

FEATURE BLOCK – Revision Manager

From version 1.2, Revision Manager is available for managing sheets based on revisions. It finds all revisions and sheets in a project, and provides convenient features of managing sheets.

Select Sheets of Revisions

Select sheets of selected revisions.

Batch Assign/Remove 

Select multiple revisions and sheets, assign/remove these revisions to/from these sheets.

Save Printset

Save selected sheets into a printset for later use.

Export Sheet List or Matrix

Export sheet list or a revision matrix (or Issue Sheet, or whatever you call it) from selected sheets to an Excel file. You can select what parameters to be included.


Verify Detail Number: If a cloud is on a sheet, Revit is not smart enough to tell which viewport the cloud is on. This app finds this missing piece of information, eliminating the need of manual effort, thus minimize room for error.

Click “Verify Detail Numbers” in the main menu to start a full scan for all clouds showing in the table. Right click on one row and then click “Refresh“ will update detail number of that row’s cloud.

If the model is large, the time needed for the plugin to find detail numbers for all clouds might be quite long. This issue is caused by Revit’s internal workflow of sheet regenerating.When you hit “Verify Detail Number”, the plugin will give a warning message and an estimation of needed time, letting the user decide whether to proceed now or later. To grant enough time for the plugin to work its way, simply let it run while you are attending a meeting, having lunch or doing other non-Revit tasks.

After finding the correct detail number for a cloud, the plugin will save it for future use. However, if the detail number of a drawing changes, the saved detail number will NOT update. Therefore, you should at least verify detail number once each time you run the plugin.

Verify Visibility: When dependent views are involved, note that initially, this app will list out the same cloud multiple times, one for every parent/dependent view, regardless of whether the cloud is actually showing up in that view. You need to run “Verify Visibility” to let the app find out whether the cloud is showing up or not. Similar to the process of verifying detail number, this command might take some time to finish, if the model is large and complex.

Verify visibility will also find out if a cloud is hidden by various settings, such as hide element or category. At least verify visibility once each time you run the plugin.


As always, suggestions for future releases are most welcomed. Feel free to contact me if you want specific function in the plugin, or if your firm has special demands that could be best met by a more customized tool.