Auto Gear Rules
Auto Gear Rules Engine
Automate repetitive equipment additions to your projects with configurable automation rules.
Overview
The Auto Gear engine evaluates rules in an IF → THEN format whenever you generate gear for a project. Instead of manually adding batteries, media, matte boxes, or support every time you add a camera, define a rule once and it handles the rest.
Requirements
Functional Requirements
| ID | Requirement | Acceptance Criteria | Priority | Source |
|---|---|---|---|---|
| REQ-AGR-001 | The system shall support IF → THEN rules whose triggers each carry their own logic operator (AND, OR, XOR, NOT) | Add a second trigger → it gets a logic operator; evaluation runs left to right with no precedence, so the operator on trigger n joins it to the result so far | Must | autoGearTriggerMatcher.js |
| REQ-AGR-002 | The system shall group its trigger types into 5 categories: Project Context, Crew, Device Name, Device Property, Project Requirements | Open the trigger picker → 5 categories; every entry in TRIGGER_TYPES belongs to one of them | Must | autoGearSchema.js |
| REQ-AGR-003 | The system shall offer per-trigger match modes drawn from MATCH_MODE_LABELS; the modes a trigger allows are declared on that trigger | Select a numeric trigger → threshold modes offered; select a boolean trigger → present/absent offered | Must | autoGearSchema.js |
| REQ-AGR-004 | The system shall support Add Gear and Remove Gear actions | Action "Add Gear" → item added to list when rule fires; "Remove Gear" → item removed; undo available | Must | useAutoGearRules.js |
| REQ-AGR-005 | The system shall support computed (smart) actions that dynamically resolve devices from the catalog at runtime | Smart action with catalog query → resolves matching devices; catalog changes → action results update; no match → skipped | Must | autoGearComputed.js |
| REQ-AGR-006 | The system shall ship factory-default rules covering chargers, cables, camera-package sync and video village | Reset to Factory → the stock rule set loads; every stock rule is editable, and deletable like any other rule | Must | autoGearDefaults.js |
| REQ-AGR-007 | The system shall support global rules (all projects) and per-project rule overrides | Set global rule → applies to all projects; override in project → project uses its rule; remove override → reverts to global | Must | useAutoGearRules.js |
| REQ-AGR-008 | The system shall support rule toggle on/off, ▲▼ reordering, duplicate, import/export JSON, and delete | Toggle → rule active/inactive; ▲▼ → moves one position; duplicate → copy created; export → JSON downloads; delete → removed | Must | AutoGearRuleCard.jsx |
| REQ-AGR-009 | The system shall auto-generate rule names when the name field is left empty | Leave name empty → generateRuleName fills it from trigger + action on save | Should | autoGearNaming.js |
| REQ-AGR-010 | The system shall block a save that is missing a name, items, or valid dynamic blocks, and warn about triggers that cannot fire | Save with no name → blocked; no items → blocked; no trigger conditions → "this rule will never fire" warning | Should | autoGearSchema.js |
| REQ-AGR-011 | The system shall provide a dedicated Auto Gear rule editor tab within the project workspace | Open project → Auto Gear tab → rule editor shows; add/edit/delete rules; rules apply immediately to gear list | Must | useAutoGearTab.js |
Non-Functional Requirements
| ID | Requirement | Metric | Priority |
|---|---|---|---|
| NFR-AUG-001 | Auto-gear rule evaluation shall complete within 200ms for ≤50 rules | Evaluation time | Should |
Data Requirements
- Global rules: stored in IndexedDB, cloud-synced via syncEngine. A pre-2026
localStoragecopy is migrated into IndexedDB on first load and then removed —localStorageis the legacy seed, not the store. - Project rules: stored on the project object
- Schema: v4. v2 introduced compound triggers, add/remove actions and per-trigger match
modes; v3 added
evaluatePerPackage; v4 added the explicit itemmodediscriminator (static,perCamera,perProjectArray,perCatalogMatch,perAccessoryCableMatch,derivedFrom,perLookupTable). Migrations run automatically — v1→v2 and v3→v4 both ship. - Required fields: a name, plus at least one device item — unless the rule is computed or dynamic, which supply their own items at evaluation time
Constraints & Limits
- Available to all tiers (Free and Pro) — Auto Gear has no paywall gate
- There is no cap on triggers per rule. This page listed a maximum of 10 until 2026-09-08; no such limit has ever been enforced anywhere in the app.
- Computed actions are read-only (factory-defined functions)
Offline Behavior
- Fully available offline — rule evaluation and gear generation are client-side
- Rule changes sync to cloud when connectivity is restored
Dependencies
- Requires: Device Library — auto-gear rules reference catalog items
- Requires: Projects — rules applied within project context
Key Concepts
| Concept | Description |
|---|---|
| Rule | An IF → THEN automation that evaluates triggers and produces items |
| Trigger | A condition that must be true to activate the rule |
| Action | Whether the rule will add or remove gear |
| Computed Action | A "smart" action that dynamically resolves items from the device catalog at runtime |
| Logic Operator | Carried by each trigger after the first — AND, OR, XOR or NOT — and applied left to right |
How Rules Work (v4 Schema)
Each rule follows a 3-step structure, mirrored by the wizard editor:
Step 1 — Triggers
Triggers define when a rule fires. A rule can hold as many triggers as you need, and each trigger after the first carries its own logic operator:
| Operator | Meaning |
|---|---|
| AND | Both the result so far and this trigger must match |
| OR | Either the result so far or this trigger matches |
| XOR | Exactly one of the two matches |
| NOT | The result so far matches and this trigger does not |
Evaluation is strictly left to right, with no operator precedence.
A AND B OR Cis read as(A AND B) OR C, never asA AND (B OR C). If a rule needs the other grouping, split it in two.
The app defines 97 trigger types across five categories. The tables below name every type in the four smaller categories and the most-used ones in Project Requirements, which is by far the largest.
| Category | Types | Trigger types |
|---|---|---|
| Project Context | 9 | Always, Scenario, Shooting Days, Delivery Resolution, Provider, Provider Category, Has Sub-rental, Has Owned Gear, Has Rental Gear |
| Crew | 2 | Crew Member, Crew Role |
| Device Name | 12 | Camera Body, Monitor, Lens Control, Video Distribution, Wireless Video, Mattebox, Camera Handle, Viewfinder, Tripod Head, Tripod Bowl, Tripod Type, Camera Cage |
| Device Property | 16 | Battery Mount Type, Power Input Type, Video Output Type, Video Input Type, FIZ Connector Type, Camera Weight (kg), Media Slot Type, Monitor Size Category, Max/Min Lens Length, Max/Min Lens Weight, Lens Front Diameter, Lens Brand, Lens Mount, Lens Series |
| Project Requirements | 58 | Recording Resolution, Codec, Sensor Mode, Aspect Ratio, Base Frame Rate, Recording Frame Rate, Slow Motion Enabled, Lens, Filter, Storage Media, Camera Handle, Viewfinder Extension, Camera Support Type … plus 45 monitoring, overlay, vehicle and cart conditions |
Match modes. Each trigger declares which of the ten modes it accepts, so the picker only ever offers the ones that make sense for that trigger:
| Mode | Label | Typical trigger |
|---|---|---|
any | If any match | Scenario, Codec, Battery Mount Type |
all | If all match | Camera Body, Lens, Storage Media |
gt | Greater than | Camera Weight, Recording Frame Rate |
gte | Greater than or equal | Lens length / weight bounds |
lt | Less than | Camera Weight, Shooting Days |
lte | Less than or equal | Lens length / weight bounds |
eq | Equal to | Lens length / weight bounds |
every | Every X Days | Shooting Days |
present | Is present | Crew Role, Slow Motion Enabled |
absent | Is absent | Crew Member, Viewfinder Extension |
Step 2 — Logic (Action)
Choose what the rule does when triggers match:
- Add Gear — add devices to the gear list
- Remove Gear — strip devices from the generated list
Step 3 — Devices
Select the items to add or remove. Each item has:
- Name — device name (with search/autocomplete against the device catalog)
- Quantity — how many to add
- Category — organizational category (Cameras, Grip, Lighting, etc.)
- Notes — free-text notes
Items are reordered with the ▲ / ▼ buttons on each row. There is no drag-and-drop here — this page described one until 2026-09-08.
Computed (Smart) Actions
Some factory rules use computed actions — functions that query the device catalog at runtime to
suggest gear. There are 33 of them; the table lists the general-purpose ones. Twelve more build
individual video-village stations (Director 7″/15″, Gaffer 7″, DoP 7″/15″, Combo 15″, iOS, DIT Loop,
Sound 5-7″, PIX-E5, PIX-E7) and nine mirror camera-package and project selections into the gear list
(syncCameraPackage*, syncProject*).
| Computed Action | What It Does |
|---|---|
suggestChargers | Matches charger to battery mount type and count |
suggestPowerCables | Finds the correct power cables for each device's power input, with a D-Tap fallback |
suggestMonitorCables | Matches SDI/HDMI video cables between camera outputs and monitor inputs, plus power cables and rigging |
suggestFizCables | Resolves FIZ motor-to-controller data cables including ARRI-specific LBUS/connector logic |
suggestPowerPlates | Adds monitoring power plates where they are needed |
suggestFocusMonitor | Suggests a focus monitor based on the camera and wireless setup |
suggestMonitorSunhoods | Adds one sun hood per monitor on the gear list, naming the source monitor in the notes |
suggestVideoVillageBatteryPlates | Adds a V-Mount/Gold-Mount plate per video distribution monitor and the focus monitor |
suggestMediaReaders | Suggests two compatible card readers per recording-media format in the project |
suggestDiopterFrame138mm | Adds the ARRI K2.0013740 138 mm diopter frame when a 138 mm in-tray diopter is requested |
suggestTransportationCars | Mirrors the configured vehicles into the Carts and Transportation category |
Computed rules show a ⚡ Smart Action badge in the editor and skip the devices step.
suggestBatteries,suggestCameraSupportandsuggestVideoDistributionMonitorsare gone. This page listed all three until 2026-09-08. Battery counts moved to the dynamic-block rule Smart Power: Batteries (Dynamic); camera support became per-brand logic rules (factory-support-*); the third never existed.
Creating a Rule
- Navigate to Settings → Workflow → Auto Gear (for global rules) or open a project's Auto Gear tab (for project-specific rules)
- Click Create Rule
- Step 1 (Triggers): Select trigger type, choose values, optionally add more triggers and set each one's logic operator
- Step 2 (Logic): Choose Add or Remove
- Step 3 (Devices): Search the device catalog, add items with quantities
- Click Save
💡 Auto-naming: If you leave the rule name empty, it will be auto-generated from the trigger type and action (e.g., "Camera → Add").
🛟 Leaving a part-built rule asks first: once you have edited anything, Escape, the header ×, the backdrop and Cancel all raise a "Discard changes?" confirm rather than throwing the draft away. "Keep editing" returns you to the step you were on with the work intact. A wizard you have not touched still closes straight away.
Dynamic Logic Blocks
Rules can include dynamic logic blocks — conditional IF/THEN statements within a rule's action step that resolve devices at runtime based on project context:
- Example: IF monitors < 7", add Small Monitor Preferred Battery; IF monitors ≥ 7", add Large Monitor Preferred Battery
- Visual builder: The Rule Editor wizard (Step 2 — Logic) provides a UI to create and edit dynamic conditions without writing code
- Smart Power Defaults: The Camera Package editor includes a dedicated section to define preferred batteries for small (< 7") and large (≥ 7") monitors, which dynamic rules reference at evaluation time
- Contextual labels: In multi-camera setups, dynamically resolved items include the camera package name (e.g., "V-Mount Battery (Cam A)") for clarity
Rule Scope: Global vs Project
| Scope | Where to manage | Applies to |
|---|---|---|
| Global | Settings → Workflow → Auto Gear | All projects; stored in IndexedDB + cloud synced |
| Project-specific | Project workspace → Auto Gear tab | Only the owning project; stored on the project object |
- Projects inherit global rules by default
- Switching to project-specific rules overrides globals for that project
- You can revert a project back to global rules at any time
Example Rules
| Trigger | Operator | Action | Items | Use Case |
|---|---|---|---|---|
| Camera Body: ARRI Alexa 35 | — | Add | 4× V-Mount Battery, 2× CFexpress | Standard camera kit |
| Scenario: any of [Dolly, Slider, Crane] | — | Add | Dana Dolly, Slider 3-ft, Sandbags ×4 | Precision movement |
| Camera Body: Sony FX6 AND Slow Motion: present | AND | Add | 4× CFexpress Type A 640GB | High-speed media |
| Crew Role: DIT | — | Add | DIT Cart, Thunderbolt Dock, SSD Shuttle | DIT station |
| Camera Weight > 10 kg | — | Add | Heavy-duty Tripod, High-hat | Heavy rig support |
Presets
The Auto Gear system features a Preset System that lets you save, organize, and load collections of rules (e.g., specific setups for Documentary, Commercial, or Interview shoots).
- Save Current Rules: Save your current workspace rules as a reusable preset.
- Load Presets: Apply a saved preset to your current project. This will replace the existing rules with the ones defined in the preset.
- Manage Presets: Rename, duplicate, or delete your custom presets.
- Storage: Presets live in your browser's local storage, obfuscated at rest, and sync across your devices via the cloud when sync is enabled.
Use presets to instantly load complex automation rules tailored to your specific workflows instead of rebuilding them from scratch.
Factory Defaults
The platform ships 112 factory rules. The headline ones:
- ⚡ Smart Charger Suggestion — computed charger matching based on battery mount
- Smart Power: Batteries (Dynamic) — a dynamic-block rule, not a computed action: 4 batteries per camera, 3 per small monitor, 4 per large monitor, resolved against your Smart Power Defaults
- ⚡ Smart Power Cable Suggestion — computed cable matching based on device power inputs
- ⚡ Smart Monitor Cable Suggestion — computed SDI/HDMI video cables for camera ↔ monitor with strict port matching, plus the monitor's power cables and rigging
- ⚡ Smart FIZ Cable Suggestion — computed motor-to-controller data cables
- ⚡ Smart Power Plate Suggestion — computed battery plates for accessories
- Camera support — ~20 per-brand rules (
factory-support-*) covering bridge plates, dovetails and heads for Sachtler, Ronford-Baby, O'Connor and the standard/short tripod sets - Weather protection — CapIT sets, rain covers, shower caps, Magliner rain cover, Easyup
- ⚡ Sync rules — mirror the camera package (body, cage, FIZ, batteries, wireless, monitor, hotswap) and the project's filter, media and lens selections into the gear list
You can disable factory defaults at any time in Settings → Workflow → Auto Gear without affecting your custom rules.
Managing Rules
- Toggle on/off without deleting — useful for seasonal or client-specific setups
- Reorder with ▲ / ▼ — execution order matches display order. The buttons are hidden while a rule search filter is active, because the visible order is not the stored order then
- Run Now (▶ on the rule card) — run that single rule against the current project immediately
- Duplicate a rule as a starting point for a similar setup
- Import / Export rules as JSON for backup or sharing with colleagues
- Delete rules you no longer need — factory rules included
- Reset to Factory to restore original configurations
On a phone or tablet the header keeps only New Rule; Stock Rules, Export, Import and Presets move into the … More button beside it. On a desktop-width screen (1280px and up) all five stay on the row. Settings → Workflow → Auto Gear folds the same way — there Save as Preset, Presets, Reset Defaults, Export and Import are the ones behind … More.
Run Now — running one rule on demand
The ▶ button on a rule card runs only that rule, without generating from every other rule in the list. It always reports what happened: how many items it added, whether everything it adds was already in the gear list, or that it produced nothing.
If the rule's conditions do not match this project — or the rule is switched off — it cannot fire on its own, so the app asks first and then runs it anyway on confirmation. That is the intended way to pull in a rule's kit for a shoot that does not technically meet its triggers. Items land in the gear list exactly as a normal generation would place them, tagged with the rule that added them, so Undo Auto Gear still removes them.
When a rule is marked Context Changed, the same button turns into a rerun (↻): the project changed under a rule that already fired, and re-running brings its output back in line.
Validation & Warnings
Saving is blocked when:
- The rule has no name — and note this is rarely seen, because an empty name is auto-filled from the trigger and action on save
- There are no device items — unless the rule is computed or dynamic, which produce their own
- A dynamic rule has no logic blocks, or a block is missing its source, target or a multiplier > 0
- A device item has no name
You are warned, but not blocked, when:
- No trigger conditions are set — "this rule will never fire"
- A numeric trigger has no threshold value
- A trigger has no values selected
There is no duplicate-action check and no circular-dependency check. This page promised both until 2026-09-08. Validation runs against one rule at a time, so it cannot see what other rules add, and triggers read project context rather than other rules — a rule cannot trigger a rule.
Data Architecture (Developer Reference)
app/src/data/auto-gear/ ├── autoGearSchema.js # v4 schema: TRIGGER_TYPES, TRIGGER_CATEGORIES, MATCH_MODE_LABELS, │ # LOGIC_OPERATORS, ITEM_MODES, validation, v1→v2 / v3→v4 migration ├── autoGearSchemaMigration.js # Migration helpers, split out to avoid an import cycle ├── autoGearEngine.js # buildProjectContext(), evaluateRules() ├── autoGearEngineExtractors.js # Context extractors for multi-camera package rule evaluation ├── autoGearTriggerMatcher.js # matchesTrigger() / matchesRule() — the logic-operator walk ├── autoGearComputed.js # COMPUTED_ACTIONS registry + runComputedAction() ├── autoGearComputedCables.js # Monitor, FIZ and power cable suggestions ├── autoGearComputedPower.js # Power plate suggestions ├── autoGearComputedMattebox.js # Matte box and filter tray suggestions ├── autoGearComputedMedia.js # Recording media suggestions ├── autoGearComputedMediaCount.js # Media quantity from record time ├── autoGearComputedMonitors.js # Focus monitor and sun hood suggestions ├── autoGearComputedSync.js # Camera-package and project sync actions ├── autoGearComputedTransportation.js # Vehicle mirroring ├── autoGearComputedVideoVillage.js # The twelve video-village station actions ├── autoGearDefaults.js # getFactoryRules() — composes the three submodules below ├── autoGearDefaultsCatalogHelpers.js # Catalog extraction helpers + the r() rule builder ├── autoGearDefaultsContext.js # Context, scenario and weather rules ├── autoGearDefaultsSupport.js # Tripod, support, device and recording-media rules ├── autoGearDefaultsComputed.js # Computed and sync rules ├── autoGearDefaultsLabels.js # COMPUTED_ACTION_LABELS — the UI copy for each smart action ├── autoGearDynamicBlocks.js # Dynamic logic block evaluation ├── autoGearDynamicBlockAuthoring.js # v4 block authoring + validation ├── autoGearDeviceOptions.js # Device name extraction for editor checkbox grids ├── autoGearCategoryMap.js # Item → gear-list category mapping ├── autoGearCategoryOrder.js # Category ordering, global and per-project ├── autoGearItemExpansion.js # Expands an emitted item into its parts ├── autoGearNaming.js # generateRuleName() ├── autoGearVocabulary.js # Shared term lists used by matching ├── hardwareDefaults.js # Smart Power Defaults resolution ├── globalRulesStore.js # Global rules store (IndexedDB + cloud sync via syncEngine) └── presetStore.js # Preset CRUD (obfuscated localStorage, cloud-synced) app/src/features/projects/components/workspace/auto-gear/ ├── AutoGearTab.jsx # Thin render shell (rule list, toolbar, actions) ├── useAutoGearTab.js # Tab state: editing, import/export, presets, confirm dialogs ├── useAutoGearRuleSearch.js # Rule list search/filter ├── AutoGearRuleCard.jsx # Rule card: trigger summary, action badge, items, ▲▼, Run Now ├── AutoGearRuleEditor.jsx # Wizard modal (portal to body) ├── AutoGearRuleSearchInput.jsx # Search box above the rule list ├── AutoGearHighlight.jsx # "⚡ RuleName" badge shown on auto-added items in gear list ├── AutoGearPowerDefaults.jsx # Smart Power Defaults editor ├── AutoGearDefaultCategory.jsx # Default category picker ├── AutoGearCameraPackageCategories.jsx # Per-package category assignment ├── ProjectAutoGearCategoryOrder.jsx # Per-project category order override ├── FactoryRuleCatalog.jsx # Stock rule browser ├── PresetManagerModal.jsx # CRUD interface for user-created presets ├── PresetLoadDialog.jsx # Dialog to select and apply a preset ├── autoGearLabelI18n.js # Trigger/action label translation ├── components/ │ ├── AutoGearHeaderActions.jsx # Title row: full button row ≥1280px, "… More" menu below │ ├── AutoGearBanners.jsx # Scope and context-changed banners │ ├── AutoGearExclusions.jsx # Excluded-item management │ ├── AutoGearLastGeneration.jsx # Last generation summary │ └── GenerationSummaryDialog.jsx └── editor/ ├── useAutoGearRuleEditor.js # Wizard state machine (draft, step navigation, CRUD) ├── useAutoGearRuleEditorDismiss.js # Dirty guard: one requestClose behind every exit (#588) ├── RuleEditorStepIndicator.jsx # Step strip (Triggers → Logic → Devices) ├── RuleEditorTestResult.jsx # "Test Rule" outcome banner ├── RuleEditorFooter.jsx # Back/Cancel, Enabled, Test Rule, Next/Save ├── QuickAddRuleEditor.jsx # Single-screen editor for simple rules ├── StepTrigger.jsx # Step 1: compound trigger builder + logic operators ├── StepLogic.jsx # Step 2: action selector + trigger summary ├── StepDevices.jsx # Step 3: item search, selection, ▲▼ reorder ├── TriggerRow.jsx # Single trigger condition row ├── CheckboxGrid.jsx # Multi-select grid with search filter ├── LogicBlocksBuilder.jsx # Dynamic logic block builder └── blocks/ # v4 block editors (simple, advanced, source, target) app/src/features/projects/hooks/features/ ├── useAutoGear.js # Core hook: dual-scope (global + per-project), evaluate, generate ├── useAutoGear/useAutoGearRules.js # Rule CRUD, scope switching, moveRule └── useRuleManager.js # Delete/duplicate confirmation flows app/src/features/settings/ ├── SettingsWorkflowTab.jsx # The Workflow tab that hosts the Auto Gear section └── SettingsAutoGear.jsx # Global rules management in Settings
Tips & Best Practices
- Start with factory defaults — they cover smart cable and charger matching out of the box
- Use compound triggers — combine device + property triggers (e.g., "ARRI AND V-Mount") for precise rules
- Mind the left-to-right order — there is no precedence, so put the trigger you want evaluated first, first
- Keep rules focused — one trigger → one logical group of items
- Test with Generate — use the "Generate Gear" button to preview what rules produce without committing
- Export before resetting — rebuilding a complex rule set from scratch is tedious
- Share rule sets — export JSON and share with colleagues using the same camera systems
Related Documentation
Last Updated: 2026-09-08 Version: 0.790.2
