FLOW Automation notifications offer a robust and efficient way to describe and manage assets within your FLOW database by utilizing the existing metadata associated with those assets. This functionality allows users to leverage the rich metadata already stored in the system to create detailed and informative notifications.
In the following guide, we will walk you through a practical example that demonstrates how to generate reports on assets using FLOW Automation notifications. Additionally, we will provide a comprehensive overview of how you can extend and customize the sample provided to better suit your specific reporting needs and workflows.
The example showcased here focuses on creating an email report that summarizes the assets processed within the notification task. Specifically, the email subject will highlight the broad location related to the assets, while the body of the email will include detailed information about the precise location of the material. This approach ensures that recipients receive clear and concise information about the assets in question, making it easier to track and manage them effectively.
Metadata substitution
We can use substitution to extract metadata from the input into the notification.
To determine the available metadata fields we should first either export a json description of the asset from automation or generate json output from the API directly (not covered here)
To generate a basic json export from FLOW Automation
- Create a new automation job called "Export JSON"
- Add an external trigger (the default settings are fine)
- Add a Metadata Export Task
- Set the filename to %f
- Set the format to JSON
- Set Custom Metadata fields to All
- Set a destination media space, where you will retrieve your json file from
- Activate the template
- Login to EditShare One, right click on an asset and select "Export JSON" from the Automation submenu
- You will find a file with the json extension in your media space
JSON is a human readable structured store for your assets metadata and may look similar to this:
{
"asset": {
"ai_data_version": null,
"ai_id": null,
"ai_status": "none",
"asset_id": 85,
"asset_type": 3,
"asset_type_id": 20,
"asset_type_text": "clip",
"asset_version": null,
"comment": "json",
"custom": {
"field_1": "Japan"
},
"customtypes": {
"field_1": "QString"
},
"last_modified": "2026-06-09T12:48:23Z",
"nle_id": null,
"revision": 5,
"thumbnail": "0a573dfd-6b52-4560-bfb8-0fda43626c07.png",
"thumbnail_path": "images/images-07/0a573dfd-6b52-4560-bfb8-0fda43626c07.png",
"uuid": "085f2fa6-9bbe-4891-baee-1436a65dff2a"
},
"capture": {
"capture_id": 20,
"chunk_group_id": 20,
"chunk_group_index": 0,
"chunk_group_uuid": "65a96dad-4053-455f-bd63-0cef15cf182a",
"is_chunked": false,
"project": "",
"recording_id": "059af7b8-ba1f-42da-ab32-544ecf807af6",
"source": "",
"tape": ""
},
"clip_id": 20,
"display_aspect_ratio": "16:9",
"display_backups": "",
"display_fileext": "mxf",
"display_filesize": "98.32 MB",
"display_filetype": "MXF Op1a",
"display_frame_rate": "25 fps",
"display_name": "aerial-view-of-serene-river-at-sunset-34494622",
"display_standard": "1080p25",
"display_video_codec": "XDCAM-HD 50Mb 1080p",
"display_video_size": "1920 x 1080",
"has_audio": false,
"has_data": false,
"has_index_file": false,
"has_transcript": false,
"has_video": true,
"is_recording": false,
"metadata": {
"captured": null,
"clip_name": "aerial-view-of-serene-river-at-sunset-34494622",
"clip_name_with_extension": "aerial-view-of-serene-river-at-sunset-34494622.mxf",
"metadata_id": 20,
"metadata_uuid": "ea146b9d-cd42-4a71-8316-8d36be905e80",
"modified": "2026-05-28T09:01:25Z",
"scene": "",
"take": "",
"timecode_end": "00:00:16:12:25/1",
"timecode_in": null,
"timecode_out": null,
"timecode_start": "00:00:00:00:25/1"
},
"mob_ids": {
"master": "060a2b340101010501010d0013-1ae1dc-52947134051ae1dc-005294713405-1a00",
"video_tracks": [
"060a2b340101010501010d0013-1ae1dc-52947134051ae1dc-005294713405-1a01"
]
},
"proxy_filename": "45927da2-db29-4d5f-927d-948b8dfc8d4b.mp4",
"proxy_has_index_file": false,
"proxy_id": 37,
"proxy_path": "proxy/proxy-4b/45927da2-db29-4d5f-927d-948b8dfc8d4b.mp4",
"status_flags": [
"online"
],
"status_text": "Online",
"video": [
{
"aspect_ratio": "16:9",
"channel": -1,
"clip_id": 20,
"data_rate": 50000,
"dominance": "progressive",
"encoding_id": 406,
"essence_id": 20,
"file": {
"asset": null,
"display_backups": "",
"display_fileext": "mxf",
"display_filesize": "98.32 MB",
"display_filetype": "MXF Op1a",
"display_name": "aerial-view-of-serene-river-at-sunset-34494622",
"file": {
"file_id": 85,
"filesize": 103095877,
"hash": "2:c8a60135449da5aa77d00d2c369e4801",
"is_placeholder": false,
"modified": "2026-05-28T09:01:25Z",
"type": "mxfop1a"
},
"locations": [
{
"archive": false,
"backup_location_id": 0,
"file_id": 85,
"media_space_location_id": 85,
"media_space_name": "TestMedia",
"media_space_uuid": "0a39ccda-5d50-4202-aac2-fbd9dcd4603a",
"userpath": "video/nature/aerial-view-of-serene-river-at-sunset-34494622.mxf"
}
],
"status_flags": [
"online"
],
"status_text": "Online"
},
"file_id": 85,
"fourcc": "xd5e",
"frame_rate": "25/1",
"gop_length": 0,
"height": 1080,
"is_image_sequence": false,
"timecode_duration": "00:00:16:13:25/1",
"timecode_end": "00:00:16:12:25/1",
"timecode_start": "00:00:00:00:25/1",
"track": 1,
"video_codec": "XDCAM-HD 50Mb 1080p",
"width": 1920
}
]
}We can extract these values by specifying the Key in its location in the nested hierarchy, separating the sections with a period (.)
For example in the above output we can extract the media_space_name under locations as:
video.file.locations.media_space_name
Or clip_name_with_extension within metadata as:
metadata.clip_name_with_extension
It may be easier to load your json onto an online JSON formatter/reader, so that you can easily collapse and expand the sections.
Once we have the keys we can embed them in our HTML email by wrapping them in:
${clip.[YOUR-KEY-HIERARCHY-HERE]}
As an example here is a simple HTML Table extracting Media Space, Clip Name, Path and Filesize into a 4 column table:
<!DOCTYPE html>
<html>
<head>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
</head>
<body>
<h2>Clips</h2>
<table>
<tr>
<th>Media Space</th>
<th>Clip Name</th>
<th>Path</th>
<th>Filesize</th>
</tr>
<tr>
<tr>
<td>${clip.video.file.locations.media_space_name}</td>
<td>${clip.metadata.clip_name_with_extension}</td>
<td>${clip.video.file.locations.userpath}</td>
<td>${clip.video.file.display_filesize}</td>
</tr>
</table>
</body>
</html>The above HTML renders as follows:
If we have more than one input into the Notification, we should limit the "Maximum Items to List" in the Notification task and surround our results with with square brackets [ ]:
<table>
<tr>
<th>Media Space</th>
<th>Clip Name</th>
<th>Path</th>
<th>Filesize</th>
</tr>
<tr>
[<tr>]
<td>${clip.video.file.locations.media_space_name}</td>
<td>${clip.metadata.clip_name_with_extension}</td>
<td>${clip.video.file.locations.userpath}</td>
<td>${clip.video.file.display_filesize}</td>
[</tr>]
</table>
And our results will render as:
These substitutions can extend to the Email Title (Subject) to. With the above example:
You have been sent some clips for review in ${clip.video.file.locations.media_space_name}
Renders the Subject line as:
You have been sent some clips for review in TestMedia
Sending links
Note: this only works from version 2026.2
You can also send links to video assets in your email using the a href tag:
<a href = "https://[[GATEWAY_IP]]:8008/organize/log?mediaspaceId=1&mediaId=${clip.clip_id}&mediaType=1">Link to ES One</a>
Here we use [[GATEWAY_IP]] which is replaced with the IP address of the FLOW server
mediaId=${clip.clip_id}. is replaced with the clip ID
Add some basic CSS styling and you can get something similar to:
Comments
0 comments
Article is closed for comments.