Revit's view filters are a per-view setting pretending to be a standard. Palette turns them into one: a spreadsheet-style editor for every filter in a view, named filter sets that stamp a whole block — graphics included — into any view, and a receipt on each one, so the day someone edits a template by hand, Palette says so.
Filters are Revit's least-discovered feature and its least-governed one: colours, order and visibility are set view by view, in a dialog that shows one view at a time.
Palette has two halves. The manager draws the standard — the grid, the sets, the rule that says where each set belongs. Then the model wears it, signs a receipt for it, and answers for every divergence. Here is the loop, top to bottom.
Tap Input or Output to isolate a half — the other collapses.
One grid for a view's filters, one page for the project's sets, one rule per set saying where it belongs. Nothing on the grid writes to Revit until you say Apply.
The Propagate page lays a view's filters out like a spreadsheet — enabled, visibility, projection and cut looks with live line previews, transparency, halftone — edited in place, several rows at once. Row order is priority in Revit, so the grid never sorts: you reorder deliberately. And everything is staged: nothing is written to Revit until you Apply to the source, or Propagate to as many views and templates as you tick — template-locked views are flagged honestly instead of silently skipped.
| Filter | On | Vis | Projection | Cut | Transp | Halftone | |
|---|---|---|---|---|---|---|---|
| FIL-Fire-EI60 | Solid · 4 | Dash · 3 | 0 | ||||
| FIL-Fire-EI30 | Solid · 3 | Dash · 2 | 0 | ||||
| FIL-Acoustic-55dB | Dash · 2 | Dash · 2 | 30 | ||||
| FIL-Existing | Solid · 1 | Solid · 1 | 50 |
Pick the categories, pick a parameter, and Palette creates one rule-based filter per distinct value it finds in the model, each with its own colour and its element count beside it — optionally applied to the active view as a solid surface fill and a projection-line colour in the same gesture. Everything arrives ticked, with two deliberate exceptions: a value whose filter already exists wears a “created” badge, and “(no value)” starts unticked, because the absence of a value is not one of the values. Tick “Also read loaded links” and it samples the links too — but never for element-valued parameters, whose rule stores an element id, and an id sampled inside a link means nothing in this model. It also names the trap that would otherwise look like a Palette bug: a filter of this model only paints linked elements where the link's visibility in the view is “By host view”.
A filter set is a named, ordered group with a level — View specific, View control or Basic, because a band is a position, not a label — a version, and the whole graphic recipe stored per member: lines, patterns, transparency, halftone, visibility. Applying it stamps the block into a view under its own header — “***VIEW CONTROL · FIRE***”, asterisks first so it sorts to the top of Revit's own dialog. Compose one from scratch, or point Capture from a view… at your best view and Palette reverse-engineers its blocks into proposed sets.
| Set | Level | Filters | Applied in | Drift | Version | Apply | |
|---|---|---|---|---|---|---|---|
| Fire ratingsby rule | View control | 8 | 34 views | 3 modified · 2 out of date | v3 | To views… | ⋯ |
| Acoustic | View control | 5 | 18 views | as applied | v2 | To views… | ⋯ |
| Facadeby rule | View specific | 6 | 9 views | as applied | v1 | To views… | ⋯ |
| Existing / demofilters missing | Basic | 4 | 31 views | 1 missing | v4 | To views… | ⋯ |
A scope rule rides on the set: view types, views or templates, scale coarser or finer than a threshold, a name fragment. It turns “somebody remembered to apply it” into “the model says whether it is applied” — any qualifying view that does not carry the set shows up in the drift review as Not applied yet. The rule never writes anything; it only reports. And it travels with the set, through export and through Graft.
Somebody spent an afternoon getting one view right. That view is the specification — and Palette reads it: point at a view or a template and it proposes one set per block of filters it finds. What you do next is the part that matters. You name the block, and you give it a BAND, which decides what it can and cannot overrule: the top band is whatever this one view needs and outranks everything below it; the middle is the office layer that drives how a view reads; the bottom is the always-on background, and it can never quietly outrank a decision taken above it. Every graphic the set will carry is shown before it is written, and editable there — unticking a filter leaves it out of the set without touching the filter itself.
Everything below is Palette reading the model back against what it wrote.
Applying writes the block and seals a receipt in the same gesture. From then on, drift has a name, a verdict, and a button that says which way it writes.
Apply a set and every ticked view and template gets the header, the filters in order, the graphics, visibility and enabled state — one named transaction, one undo. In the same gesture Palette seals a receipt on the view: which set, which version, which fingerprint. The receipt is written only when Palette writes; reading the model back never touches it.
The drift review reads every receipt back against the model and gives each view a verdict: Modified outside Palette, Out of date because the set moved on, Missing, or Not applied yet where the rule says it belongs. Every answer names its direction before it writes — Accept the divergence and stop being nagged, Restore set → view, or Make standard view → set when the hand edit was actually right. “Update the views that fell behind” is one command on the set's row.
| View / template | Set | Verdict | What changed | Action | |
|---|---|---|---|---|---|
ARC-Working — Level 2 | Fire ratings | Modified outside Palette | 1 added · reordered | AcceptRestoreset → viewMake standardview → set | |
ARC-GA PlansTemplate | Fire ratings | Set has moved on · v1 → v3 | the set is at v3; this view carries v1 | Restoreset → view | |
ARC-Working — Level 5 | Fire ratings | Not applied yet — rule | applying it would add 8 filters and its group header | Restoreset → view | |
ARC-Detail — Stair core | Acoustic | Accepted as divergent | left as it is, on purpose · accepted by MFernandez · 12 Aug 2026 |
Across views takes a single filter and lays it over every filter-capable view and template in the project, then does the arithmetic Revit never offers: it groups the placements by their actual configuration — overrides, visibility and enabled state together — and gives each group a letter. A is the biggest group, so “34 placements · 3 configurations” means two pockets of the project have quietly drifted, and the letters say exactly which views are in which. Template-locked views never get a row of their own pretending they can be written: they fold under the template that governs them, behind a “12 views” chip. Pick any row marked applied as the source and the divergence localises itself — a “≠ source” chip per view, an amber tint per channel — then propagate to as many destinations as you tick, adding the filter where it was missing.
| Source | Dest. | Name | State | On | Vis | Projection | Transp | Cut | Halftone |
|---|---|---|---|---|---|---|---|---|---|
| — | 🔒 via template ARC-Detail Std · 4 views | via template | |||||||
| TemplateARC-GA Plans12 views | applied | ● | ● | ━ | 50% | ━ | — | ||
| ViewARC-Working — Level 2 | applied≠ source | ● | ● | ━ | 35% | ━ | — | ||
| ViewARC-Working — Level 5 | not applied | ||||||||
Palette sees the twins Revit's own filter list cannot — “Same categories and rules as: …” — and Consolidate is the half that acts on them: keep one, repoint every view that used the others, delete what is left over. Exact duplicates arrive ticked, because merging them changes nothing on screen; near-duplicates arrive unticked with the difference spelled out on each line, because “their rules differ. Merging them changes what the repointed views affect.” The survivor is pre-chosen by reach rather than by count of placements — a filter sitting on a single template reads “1 place · 300 views”, so the one commanding the project is never the one deleted by default. Where the merge disturbs a block Palette had sealed, the receipt is re-sealed with it, so Set drift does not report your tidy-up as somebody's hand edit — except where re-sealing would erase a finding that was already there, which it names instead. And if any part of the model could not be read when the window opened, nothing is deleted at all: the views are repointed and the filters stay, because absence only proves “unused” if you managed to look everywhere.
Some filters exist to catch mistakes: unrated walls, unnamed rooms. Right-click one and make it a Canon rule — “must catch nothing”. Palette translates the categories and conditions into Canon's language, and from then on anything the filter would catch becomes a Canon finding, with severity, waivers and the health scan the office already reads. And when a rule cannot be translated faithfully, Palette refuses and names the condition, rather than shipping a rule that means something else.
Sets export as portable .json and publish to Graft — which filters, what order, which band, which graphics — matched by identity, not by name, so a rename never orphans a view. The receipts deliberately stay behind: a receipt for a view that was never stamped would be fiction. Lens completes the circle, answering “why is this element painted like that?” straight from the element's card.
A plan and its sibling were the same last month. Someone tweaked a colour here, switched one off there, and nobody can say what the difference IS — only that the drawings no longer match. Compare views puts the two side by side, names the drift channel by channel (projection lines, surface pattern, cut lines, transparency, halftone, visibility) and lets you choose, per row, which side wins. Everything is staged: a tinted row holds an action and nothing changes in Revit until you Apply. A padlock means that direction is not available — a view driven by its template cannot be written to, so the diff reads the template's filters and disables copies to that side.
| Filter | In A | In B | Difference | Action |
|---|---|---|---|---|
| FIL — Existing to remain | visible · overrides | visible · overrides | differs in: projection lines, surface pattern | A → B |
| FIL — Fire compartment | visible · overrides | hidden | differs in: visibility | A → B |
| FIL — Zone · Retail | visible · overrides | — | only in A | — |
| FIL — Demolition | — | visible · disabled · overrides | only in B | 🔒— |
| FIL — Structural grid | visible | visible | identical | — |
Palette ships as a flagship on the Views panel of the BIMIO tab. Capture a set from your best view and let every other view wear it. Revit 2024–2027, full trial, no card.