Overview
Has Metadata checks whether a specified Field Name exists in the input's metadata. The output is a 0 or 1 scalar value, readable through expressions from any other node to drive a property.
Typical cases: adjusting a Color Corrector differently depending on whether a shot was tagged "approved", choosing an alternative compositing mode if an asset is marked as a matte painting, or enabling a debug overlay only for frames that carry a specific tag.
Where to find this node
- Effects Library:
Tools > Metadata > Has Metadata - Quick add: right-click in the Node Editor →
Add Tool > Metadata > Has Metadata
How it works
The node tests the existence (and optionally the value) of a field. The result is exposed as a scalar output:
- Simple existence
- If the field exists = 1, otherwise = 0. Regardless of the field's value.
- Value match
- If Match Value is filled in, it returns 1 only if the field exists AND its value matches exactly.
- Reading by expression
- Reference:
HasMetadata1.Outputfrom another property to drive a behavior (e.g. the Blend factor of a Merge).
Inputs
- Input (orange) - the image whose metadata is tested. The image output passes the input through unchanged.
Setup
Switching between two versions based on a tag:
MediaIn → Has Metadata (Field = "Approved")
↓
Merge (Foreground Blend = HasMetadata1.Output)
↑ ↑
VersionA ──────────────────┘
VersionB ─────────────────────────────────────
(if not approved, blend 0 → VersionB visible)
Conditional pipeline:
MediaIn → Has Metadata (Field = "DebugMode")
↓
Text+ (Show = HasMetadata1.Output)
shows a debug overlay if the tag is present
Value match:
MediaIn → Has Metadata (Field = "Status", Match = "approved")
↓
output = 1 only if Status exists AND equals "approved"Controls tab
- Field Name (default: empty)
- Name of the metadata field to test. Case-sensitive depending on the configuration; follow the conventions used in your pipeline.
- Match Value (default: empty)
- When filled in, the test only returns 1 if the field exists AND its value matches exactly. When empty, it is a simple existence test.
- Output (read-only, 0 or 1)
- The computed scalar value. Can be referenced through
HasMetadata1.Outputfrom expressions.
Use cases
- A/B version switch - two versions of a composite feed a Merge whose Blend is driven by Has Metadata = it switches based on a tag.
- Conditional debug overlay - show debug information (Text+, Indicator) only when a "debug" tag is present. Handy in reviews without changing the comp.
- Data-driven pipeline - turn whole branches on/off (through Saver Pass Through or Merge Blend) depending on the presence of metadata.
- Quality indicator - a Text+ whose color is driven by HasMetadata1.Output: green if "approved", red otherwise. A quick visual check.
- Skip processing if already done - if a "processed" tag is present, bypass a heavy chain through a blend or skip to save render time.
- Automated conform - a Saver template based on Has Metadata to create a naming convention depending on whether certain fields are filled in.
Tips
- Reference Output through expressions - on the target property (e.g. Blend), right-click → Expression →
HasMetadata1.Output. The node then drives the value dynamically. - Match Value is case-sensitive - depending on the stream configuration, "Approved" and "approved" may be different. Standardize across the whole pipeline.
- Empty = pure existence test - leave Match Value empty to ignore the value and just test whether the key exists. More tolerant of value variations.
- Several Has Metadata nodes in parallel - for complex AND/OR tests, connect several Has Metadata nodes and combine their Outputs through expressions:
HasMetadata1.Output * HasMetadata2.Output= AND. - No visual impact - the node does not change the image. It can sit anywhere in the chain at no visual cost.
- Pairs well with Set Metadata - a classic pipeline: Set Metadata upstream of a chain, Has Metadata downstream to branch conditionally.
- For more complex scripting, use a Lua console / Fuse rather than stacking too many Has Metadata nodes - beyond 3-4 nested tests, Lua code is easier to read.
