feat(nukestudio): plugins work and basic Tags integration

This commit is contained in:
Jakub Jezek 2019-05-14 15:43:58 +02:00
parent 2cf60c1fbb
commit 35e5e7319f
18 changed files with 740 additions and 123 deletions

View file

@ -9,7 +9,7 @@ class CollectAssumedDestination(pyblish.api.ContextPlugin):
label = "Collect Assumed Destination"
order = pyblish.api.CollectorOrder + 0.498
exclude_families = ["clip", "trackItem"]
exclude_families = ["clip"]
def process(self, context):
for instance in context:

View file

@ -0,0 +1,14 @@
from pyblish import api
from pypeapp import config
class CollectPresets(api.ContextPlugin):
"""Collect Presets."""
order = api.CollectorOrder
label = "Collect Presets"
def process(self, context):
context.data["presets"] = config.get_presets()
self.log.info(context.data["presets"])
return

View file

@ -1,14 +0,0 @@
from pyblish import api
class CollectTrackItemTags(api.InstancePlugin):
"""Collect Tags from selected track items."""
order = api.CollectorOrder
label = "Collect Tags"
hosts = ["nukestudio"]
def process(self, instance):
instance.data["tags"] = instance.data["item"].tags()
self.log.info(instance.data["tags"])
return

View file

@ -1,28 +1,14 @@
from pyblish import api
class CollectFramerate(api.ContextPlugin):
"""Collect framerate from selected sequence."""
order = api.CollectorOrder
label = "Collect Framerate"
hosts = ["nukestudio"]
def process(self, context):
for item in context.data.get("selection", []):
context.data["framerate"] = item.sequence().framerate().toFloat()
return
class CollectTrackItems(api.ContextPlugin):
class CollectClips(api.ContextPlugin):
"""Collect all Track items selection."""
order = api.CollectorOrder
label = "Collect Track Items"
label = "Collect Clips"
hosts = ["nukestudio"]
def process(self, context):
import os
data = {}
for item in context.data.get("selection", []):
self.log.info("__ item: {}".format(item))
@ -43,13 +29,13 @@ class CollectTrackItems(api.ContextPlugin):
}
for key, value in data.items():
family = "clip"
context.create_instance(
name=key,
subset="trackItem",
subset="{0}{1}".format(family, 'Default'),
asset=value["item"].name(),
item=value["item"],
family="trackItem",
family=family,
tasks=value["tasks"],
startFrame=value["startFrame"],
endFrame=value["endFrame"],

View file

@ -0,0 +1,13 @@
from pyblish import api
class CollectFramerate(api.ContextPlugin):
"""Collect framerate from selected sequence."""
order = api.CollectorOrder
label = "Collect Framerate"
hosts = ["nukestudio"]
def process(self, context):
for item in context.data.get("selection", []):
context.data["framerate"] = item.sequence().framerate().toFloat()
return

View file

@ -0,0 +1,72 @@
import pyblish.api
from avalon import api
class CollectHierarchyContext(pyblish.api.ContextPlugin):
"""Collecting hierarchy context from `parents` and `hierarchy` data
present in `clip` family instances coming from the request json data file
It will add `hierarchical_context` into each instance for integrate
plugins to be able to create needed parents for the context if they
don't exist yet
"""
label = "Collect Hierarchy Context"
order = pyblish.api.CollectorOrder + 0.1
def update_dict(self, ex_dict, new_dict):
for key in ex_dict:
if key in new_dict and isinstance(ex_dict[key], dict):
new_dict[key] = self.update_dict(ex_dict[key], new_dict[key])
else:
new_dict[key] = ex_dict[key]
return new_dict
def process(self, context):
json_data = context.data.get("jsonData", None)
temp_context = {}
for instance in json_data['instances']:
if instance['family'] in 'projectfile':
continue
in_info = {}
name = instance['name']
# suppose that all instances are Shots
in_info['entity_type'] = 'Shot'
instance_pyblish = [
i for i in context.data["instances"] if i.data['asset'] in name][0]
in_info['custom_attributes'] = {
'fend': instance_pyblish.data['endFrame'],
'fstart': instance_pyblish.data['startFrame'],
'fps': instance_pyblish.data['fps']
}
in_info['tasks'] = instance['tasks']
parents = instance.get('parents', [])
actual = {name: in_info}
for parent in reversed(parents):
next_dict = {}
parent_name = parent["entityName"]
next_dict[parent_name] = {}
next_dict[parent_name]["entity_type"] = parent["entityType"]
next_dict[parent_name]["childs"] = actual
actual = next_dict
temp_context = self.update_dict(temp_context, actual)
self.log.debug(temp_context)
# TODO: 100% sure way of get project! Will be Name or Code?
project_name = api.Session["AVALON_PROJECT"]
final_context = {}
final_context[project_name] = {}
final_context[project_name]['entity_type'] = 'Project'
final_context[project_name]['childs'] = temp_context
# adding hierarchy context to instance
context.data["hierarchyContext"] = final_context
self.log.debug("context.data[hierarchyContext] is: {}".format(
context.data["hierarchyContext"]))

View file

@ -0,0 +1,30 @@
from pyblish import api
class CollectClipMetadata(api.InstancePlugin):
"""Collect Metadata from selected track items."""
order = api.CollectorOrder + 0.01
label = "Collect Metadata"
hosts = ["nukestudio"]
def process(self, instance):
item = instance.data["item"]
ti_metadata = self.metadata_to_string(dict(item.metadata()))
ms_metadata = self.metadata_to_string(
dict(item.source().mediaSource().metadata()))
instance.data["clipMetadata"] = ti_metadata
instance.data["mediaSourceMetadata"] = ms_metadata
self.log.info(instance.data["clipMetadata"])
self.log.info(instance.data["mediaSourceMetadata"])
return
def metadata_to_string(self, metadata):
data = dict()
for k, v in metadata.items():
if v not in ["-", ""]:
data[str(k)] = v
return data

View file

@ -0,0 +1,45 @@
from pyblish import api
class CollectClipSubsets(api.InstancePlugin):
"""Collect Subsets from selected Clips, Tags, Preset."""
order = api.CollectorOrder + 0.01
label = "Collect Subsets"
hosts = ["nukestudio"]
families = ['clip']
def process(self, instance):
tags = instance.data.get('tags', None)
presets = instance.context.data['presets'][
instance.context.data['host']]
if tags:
self.log.info(tags)
if presets:
self.log.info(presets)
# get presets and tags
# iterate tags and get task family
# iterate tags and get host family
# iterate tags and get handles family
instance = instance.context.create_instance(instance_name)
instance.data.update({
"subset": subset_name,
"stagingDir": staging_dir,
"task": task,
"representation": ext[1:],
"host": host,
"asset": asset_name,
"label": label,
"name": name,
# "hierarchy": hierarchy,
# "parents": parents,
"family": family,
"families": [families, 'ftrack'],
"publish": True,
# "files": files_list
})
instances.append(instance)

View file

@ -0,0 +1,30 @@
from pyblish import api
class CollectClipTags(api.InstancePlugin):
"""Collect Tags from selected track items."""
order = api.CollectorOrder
label = "Collect Tags"
hosts = ["nukestudio"]
families = ['clip']
def process(self, instance):
tags = instance.data["item"].tags()
tags_d = []
if tags:
for t in tags:
tag_data = {
"name": t.name(),
"object": t,
"metadata": t.metadata(),
"inTime": t.inTime(),
"outTime": t.outTime(),
}
tags_d.append(tag_data)
instance.data["tags"] = tags_d
self.log.info(instance.data["tags"])
return

View file

@ -0,0 +1,132 @@
import pyblish.api
import os
from avalon import io, api
class IntegrateAssumedDestination(pyblish.api.InstancePlugin):
"""Generate the assumed destination path where the file will be stored"""
label = "Integrate Assumed Destination"
order = pyblish.api.IntegratorOrder - 0.05
families = ["clip", "projectfile"]
def process(self, instance):
self.create_destination_template(instance)
template_data = instance.data["assumedTemplateData"]
# template = instance.data["template"]
anatomy = instance.context.data['anatomy']
# template = anatomy.publish.path
anatomy_filled = anatomy.format(template_data)
mock_template = anatomy_filled.publish.path
# For now assume resources end up in a "resources" folder in the
# published folder
mock_destination = os.path.join(os.path.dirname(mock_template),
"resources")
# Clean the path
mock_destination = os.path.abspath(os.path.normpath(mock_destination))
# Define resource destination and transfers
resources = instance.data.get("resources", list())
transfers = instance.data.get("transfers", list())
for resource in resources:
# Add destination to the resource
source_filename = os.path.basename(resource["source"])
destination = os.path.join(mock_destination, source_filename)
# Force forward slashes to fix issue with software unable
# to work correctly with backslashes in specific scenarios
# (e.g. escape characters in PLN-151 V-Ray UDIM)
destination = destination.replace("\\", "/")
resource['destination'] = destination
# Collect transfers for the individual files of the resource
# e.g. all individual files of a cache or UDIM textures.
files = resource['files']
for fsrc in files:
fname = os.path.basename(fsrc)
fdest = os.path.join(mock_destination, fname)
transfers.append([fsrc, fdest])
instance.data["resources"] = resources
instance.data["transfers"] = transfers
def create_destination_template(self, instance):
"""Create a filepath based on the current data available
Example template:
{root}/{project}/{silo}/{asset}/publish/{subset}/v{version:0>3}/
{subset}.{representation}
Args:
instance: the instance to publish
Returns:
file path (str)
"""
# get all the stuff from the database
subset_name = instance.data["subset"]
self.log.info(subset_name)
asset_name = instance.data["asset"]
project_name = api.Session["AVALON_PROJECT"]
project = io.find_one({"type": "project",
"name": project_name},
projection={"config": True, "data": True})
template = project["config"]["template"]["publish"]
# anatomy = instance.context.data['anatomy']
asset = io.find_one({"type": "asset",
"name": asset_name,
"parent": project["_id"]})
assert asset, ("No asset found by the name '{}' "
"in project '{}'".format(asset_name, project_name))
silo = asset['silo']
subset = io.find_one({"type": "subset",
"name": subset_name,
"parent": asset["_id"]})
# assume there is no version yet, we start at `1`
version = None
version_number = 1
if subset is not None:
version = io.find_one({"type": "version",
"parent": subset["_id"]},
sort=[("name", -1)])
# if there is a subset there ought to be version
if version is not None:
version_number += version["name"]
if instance.data.get('version'):
version_number = int(instance.data.get('version'))
hierarchy = asset['data']['parents']
if hierarchy:
# hierarchy = os.path.sep.join(hierarchy)
hierarchy = os.path.join(*hierarchy)
template_data = {"root": api.Session["AVALON_PROJECTS"],
"project": {"name": project_name,
"code": project['data']['code']},
"silo": silo,
"family": instance.data['family'],
"asset": asset_name,
"subset": subset_name,
"version": version_number,
"hierarchy": hierarchy,
"representation": "TEMP"}
instance.data["assumedTemplateData"] = template_data
self.log.info(template_data)
instance.data["template"] = template

View file

@ -0,0 +1,21 @@
import pyblish.api
class IntegrateFtrackComponentOverwrite(pyblish.api.InstancePlugin):
"""
Set `component_overwrite` to True on all instances `ftrackComponentsList`
"""
order = pyblish.api.IntegratorOrder + 0.49
label = 'Overwrite ftrack created versions'
families = ["clip"]
optional = True
active = False
def process(self, instance):
component_list = instance.data['ftrackComponentsList']
for cl in component_list:
cl['component_overwrite'] = True
self.log.debug('Component {} overwriting'.format(
cl['component_data']['name']))

View file

@ -0,0 +1,140 @@
import pyblish.api
from avalon import io
class IntegrateHierarchyToAvalon(pyblish.api.ContextPlugin):
"""
Create entities in ftrack based on collected data from premiere
"""
order = pyblish.api.IntegratorOrder - 0.1
label = 'Integrate Hierarchy To Avalon'
families = ['clip']
def process(self, context):
if "hierarchyContext" not in context.data:
return
self.db = io
if not self.db.Session:
self.db.install()
input_data = context.data["hierarchyContext"]
self.import_to_avalon(input_data)
def import_to_avalon(self, input_data, parent=None):
for name in input_data:
self.log.info('input_data[name]: {}'.format(input_data[name]))
entity_data = input_data[name]
entity_type = entity_data['entity_type']
data = {}
# Process project
if entity_type.lower() == 'project':
entity = self.db.find_one({'type': 'project'})
# TODO: should be in validator?
assert (entity is not None), "Didn't find project in DB"
# get data from already existing project
for key, value in entity.get('data', {}).items():
data[key] = value
self.av_project = entity
# Raise error if project or parent are not set
elif self.av_project is None or parent is None:
raise AssertionError(
"Collected items are not in right order!"
)
# Else process assset
else:
entity = self.db.find_one({'type': 'asset', 'name': name})
# Create entity if doesn't exist
if entity is None:
if self.av_project['_id'] == parent['_id']:
silo = None
elif parent['silo'] is None:
silo = parent['name']
else:
silo = parent['silo']
entity = self.create_avalon_asset(name, silo)
self.log.info('entity: {}'.format(entity))
self.log.info('data: {}'.format(entity.get('data', {})))
self.log.info('____1____')
data['entityType'] = entity_type
# TASKS
tasks = entity_data.get('tasks', [])
if tasks is not None or len(tasks) > 0:
data['tasks'] = tasks
parents = []
visualParent = None
data = input_data[name]
if self.av_project['_id'] != parent['_id']:
visualParent = parent['_id']
parents.extend(parent.get('data', {}).get('parents', []))
parents.append(parent['name'])
data['visualParent'] = visualParent
data['parents'] = parents
self.db.update_many(
{'_id': entity['_id']},
{'$set': {
'data': data,
}})
entity = self.db.find_one({'type': 'asset', 'name': name})
self.log.info('entity: {}'.format(entity))
self.log.info('data: {}'.format(entity.get('data', {})))
self.log.info('____2____')
# Else get data from already existing
else:
self.log.info('entity: {}'.format(entity))
self.log.info('data: {}'.format(entity.get('data', {})))
self.log.info('________')
for key, value in entity.get('data', {}).items():
data[key] = value
data['entityType'] = entity_type
# TASKS
tasks = entity_data.get('tasks', [])
if tasks is not None or len(tasks) > 0:
data['tasks'] = tasks
parents = []
visualParent = None
# do not store project's id as visualParent (silo asset)
if self.av_project['_id'] != parent['_id']:
visualParent = parent['_id']
parents.extend(parent.get('data', {}).get('parents', []))
parents.append(parent['name'])
data['visualParent'] = visualParent
data['parents'] = parents
# CUSTOM ATTRIBUTES
for k, val in entity_data.get('custom_attributes', {}).items():
data[k] = val
# Update entity data with input data
self.db.update_many(
{'_id': entity['_id']},
{'$set': {
'data': data,
}})
if 'childs' in entity_data:
self.import_to_avalon(entity_data['childs'], entity)
def create_avalon_asset(self, name, silo):
item = {
'schema': 'avalon-core:asset-2.0',
'name': name,
'silo': silo,
'parent': self.av_project['_id'],
'type': 'asset',
'data': {}
}
entity_id = self.db.insert_one(item).inserted_id
return self.db.find_one({'_id': entity_id})

View file

@ -0,0 +1,155 @@
import pyblish.api
class IntegrateHierarchyToFtrack(pyblish.api.ContextPlugin):
"""
Create entities in ftrack based on collected data from premiere
Example of entry data:
{
"ProjectXS": {
"entity_type": "Project",
"custom_attributes": {
"fps": 24,...
},
"tasks": [
"Compositing",
"Lighting",... *task must exist as task type in project schema*
],
"childs": {
"sq01": {
"entity_type": "Sequence",
...
}
}
}
}
"""
order = pyblish.api.IntegratorOrder
label = 'Integrate Hierarchy To Ftrack'
families = ["clip"]
optional = False
def process(self, context):
self.context = context
if "hierarchyContext" not in context.data:
return
self.ft_project = None
self.session = context.data["ftrackSession"]
input_data = context.data["hierarchyContext"]
# adding ftrack types from presets
ftrack_types = context.data['ftrackTypes']
self.import_to_ftrack(input_data, ftrack_types)
def import_to_ftrack(self, input_data, ftrack_types, parent=None):
for entity_name in input_data:
entity_data = input_data[entity_name]
entity_type = entity_data['entity_type'].capitalize()
if entity_type.lower() == 'project':
query = 'Project where full_name is "{}"'.format(entity_name)
entity = self.session.query(query).one()
self.ft_project = entity
self.task_types = self.get_all_task_types(entity)
elif self.ft_project is None or parent is None:
raise AssertionError(
"Collected items are not in right order!"
)
# try to find if entity already exists
else:
query = '{} where name is "{}" and parent_id is "{}"'.format(
entity_type, entity_name, parent['id']
)
try:
entity = self.session.query(query).one()
except Exception:
entity = None
# Create entity if not exists
if entity is None:
entity = self.create_entity(
name=entity_name,
type=entity_type,
parent=parent
)
# self.log.info('entity: {}'.format(dict(entity)))
# CUSTOM ATTRIBUTES
custom_attributes = entity_data.get('custom_attributes', [])
instances = [
i for i in self.context.data["instances"] if i.data['asset'] in entity['name']]
for key in custom_attributes:
assert (key in entity['custom_attributes']), (
'Missing custom attribute')
entity['custom_attributes'][key] = custom_attributes[key]
for instance in instances:
instance.data['ftrackShotId'] = entity['id']
self.session.commit()
# TASKS
tasks = entity_data.get('tasks', [])
existing_tasks = []
tasks_to_create = []
for child in entity['children']:
if child.entity_type.lower() == 'task':
existing_tasks.append(child['name'])
# existing_tasks.append(child['type']['name'])
for task in tasks:
if task in existing_tasks:
print("Task {} already exists".format(task))
continue
tasks_to_create.append(task)
for task in tasks_to_create:
self.create_task(
name=task,
task_type=ftrack_types[task],
parent=entity
)
self.session.commit()
if 'childs' in entity_data:
self.import_to_ftrack(
entity_data['childs'], ftrack_types, entity)
def get_all_task_types(self, project):
tasks = {}
proj_template = project['project_schema']
temp_task_types = proj_template['_task_type_schema']['types']
for type in temp_task_types:
if type['name'] not in tasks:
tasks[type['name']] = type
return tasks
def create_task(self, name, task_type, parent):
task = self.session.create('Task', {
'name': name,
'parent': parent
})
# TODO not secured!!! - check if task_type exists
self.log.info(task_type)
self.log.info(self.task_types)
task['type'] = self.task_types[task_type]
self.session.commit()
return task
def create_entity(self, name, type, parent):
entity = self.session.create(type, {
'name': name,
'parent': parent
})
self.session.commit()
return entity

View file

@ -10,7 +10,7 @@ class ValidateNames(api.InstancePlugin):
"""
order = api.ValidatorOrder
families = ["trackItem"]
families = ["clip"]
match = api.Exact
label = "Names"
hosts = ["nukestudio"]
@ -39,4 +39,4 @@ class ValidateNamesFtrack(ValidateNames):
"""
order = api.ValidatorOrder
families = ["trackItem", "ftrack"]
families = ["clip", "ftrack"]

View file

@ -1,13 +1,13 @@
from pyblish import api
class ValidateTrackItem(api.InstancePlugin):
class ValidateClip(api.InstancePlugin):
"""Validate the track item to the sequence.
Exact matching to optimize processing.
"""
order = api.ValidatorOrder
families = ["trackItem"]
families = ["clip"]
match = api.Exact
label = "Validate Track Item"
hosts = ["nukestudio"]
@ -44,14 +44,3 @@ class ValidateTrackItem(api.InstancePlugin):
assert sequence.framerate() == source_framerate, msg.format(
"framerate", source_framerate, sequence.framerate()
)
#
# class ValidateTrackItemFtrack(ValidateTrackItem):
# """Validate the track item to the sequence.
#
# Because we are matching the families exactly, we need this plugin to
# accommodate for the ftrack family addition.
# """
#
# order = api.ValidatorOrder
# families = ["trackItem", "ftrack"]

View file

@ -1,19 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hieroXML>
<hieroXML version="11" release="11.2v2" revision="4" name="NukeStudio">
<Project eightBitLut="sRGB" viewerLut="sRGB" logLut="Cineon" redVideoDecodeMode="0" posterFrameSetting="First" ocioConfigName="custom" timedisplayformat="0" exportRootPathMode="ProjectDirectory" customExportRootPath="" timelineReformatResizeType="Width" useViewColors="0" samplerate="48000/1" timelineReformatCenter="1" editable="1" shotPresetName="Basic Nuke Shot With Annotations" name="SharedTags" floatLut="linear" nukeUseOCIO="0" project_directory="" workingSpace="linear" framerate="24/1" sixteenBitLut="sRGB" buildTrackName="VFX" timelineReformatType="To Format" thumbnailLut="sRGB" posterCustomFrame="0" guid="{ba9eb7de-26cc-7146-a12b-b59ab35d5469}" ocioconfigpath="" ocioConfigCustom="0" starttimecode="86400">
<hieroXML release="11.2v2" revision="4" name="NukeStudio" version="11">
<Project useViewColors="0" customExportRootPath="" eightBitLut="sRGB" nukeUseOCIO="0" shotPresetName="Basic Nuke Shot With Annotations" timedisplayformat="0" exportRootPathMode="ProjectDirectory" redVideoDecodeMode="0" samplerate="48000/1" name="SharedTags" timelineReformatResizeType="Width" viewerLut="sRGB" framerate="24/1" logLut="Cineon" ocioConfigName="custom" timelineReformatCenter="1" floatLut="linear" posterCustomFrame="0" sixteenBitLut="sRGB" workingSpace="linear" editable="1" thumbnailLut="sRGB" timelineReformatType="To Format" ocioConfigCustom="0" starttimecode="86400" buildTrackName="VFX" guid="{ba9eb7de-26cc-7146-a12b-b59ab35d5469}" ocioconfigpath="" posterFrameSetting="First" project_directory="">
<items>
<RootBinProjectItem editable="1" name="Sequences" guid="{a3ba3ce5-8d61-6240-a7b3-b99e4a8bbe9d}">
<RootBinProjectItem editable="1" guid="{a3ba3ce5-8d61-6240-a7b3-b99e4a8bbe9d}" name="Sequences">
<BinViewType>2</BinViewType>
<BinViewZoom>70</BinViewZoom>
<BinViewSortColumnIndex>0</BinViewSortColumnIndex>
<BinViewSortOrder>0</BinViewSortOrder>
<AllowedItems>13</AllowedItems>
</RootBinProjectItem>
<RootBinProjectItem editable="1" name="Tags" guid="{74723746-d7a9-884f-9489-bf0cfe2137fa}">
<RootBinProjectItem editable="1" guid="{74723746-d7a9-884f-9489-bf0cfe2137fa}" name="Tags">
<items>
<TagClassProjectItem editable="1" name="audio" guid="{30184e7c-e9d0-ba40-8627-f3600b3c7d0b}">
<TagClass editable="1" icon="Y:/bait-conda-git-deployment/repositories/bait-environment/pyblish-bumpybox/pyblish_bumpybox/environment_variables/hiero_plugin_path/StartupProjects/Hiero/volume.png" visible="1" name="audio" guid="1978e3db-6ad6-af41-87e6-88a8c1a2ef6c" objName="tag">
<TagClassProjectItem editable="1" guid="{30184e7c-e9d0-ba40-8627-f3600b3c7d0b}" name="audio">
<TagClass icon="Y:/bait-conda-git-deployment/repositories/bait-environment/pyblish-bumpybox/pyblish_bumpybox/environment_variables/hiero_plugin_path/StartupProjects/Hiero/volume.png" objName="tag" editable="1" guid="1978e3db-6ad6-af41-87e6-88a8c1a2ef6c" visible="1" name="audio">
<sets>
<Set title="" domainroot="tag">
<values>
@ -23,10 +23,10 @@
</sets>
</TagClass>
</TagClassProjectItem>
<BinProjectItem editable="1" name="task" guid="{c26fe4a3-ea9b-e446-92c3-4f2d1e5c5c47}">
<BinProjectItem editable="1" guid="{c26fe4a3-ea9b-e446-92c3-4f2d1e5c5c47}" name="task">
<items>
<TagClassProjectItem editable="1" name="Editing" guid="{b5885be5-d09b-244b-b4a4-dec427a534a7}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Editing" guid="4b652e43-47ef-6c4e-871d-18cdc3299f0f" objName="tag">
<TagClassProjectItem editable="1" guid="{b5885be5-d09b-244b-b4a4-dec427a534a7}" name="Editing">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="4b652e43-47ef-6c4e-871d-18cdc3299f0f" visible="1" name="Editing">
<sets>
<Set title="" domainroot="tag">
<values>
@ -37,8 +37,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Blocking" guid="{2d8da183-0d62-344e-810f-133153ea9a42}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Blocking" guid="9d6fb373-166a-684c-a5d2-d9d6bd6ca0ca" objName="tag">
<TagClassProjectItem editable="1" guid="{2d8da183-0d62-344e-810f-133153ea9a42}" name="Blocking">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="9d6fb373-166a-684c-a5d2-d9d6bd6ca0ca" visible="1" name="Blocking">
<sets>
<Set title="" domainroot="tag">
<values>
@ -49,8 +49,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Tracking" guid="{eb2f8f5f-4e80-2046-9aa5-cf49e3f44dc2}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Tracking" guid="aa977a57-886d-ed4b-b91a-aeb1e25ddabc" objName="tag">
<TagClassProjectItem editable="1" guid="{eb2f8f5f-4e80-2046-9aa5-cf49e3f44dc2}" name="Tracking">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="aa977a57-886d-ed4b-b91a-aeb1e25ddabc" visible="1" name="Tracking">
<sets>
<Set title="" domainroot="tag">
<values>
@ -61,8 +61,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Animation" guid="{bd84a0a6-454a-e346-8cfc-b32719aac901}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Animation" guid="4128ded5-cf1d-7249-9d2c-ddbe52d2e4e7" objName="tag">
<TagClassProjectItem editable="1" guid="{bd84a0a6-454a-e346-8cfc-b32719aac901}" name="Animation">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="4128ded5-cf1d-7249-9d2c-ddbe52d2e4e7" visible="1" name="Animation">
<sets>
<Set title="" domainroot="tag">
<values>
@ -73,8 +73,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Texturing" guid="{b3236005-6f9b-ef4a-bb5d-0df15637e9a5}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Texturing" guid="3a00a983-f8a1-d44e-8446-48fd5ba2e7c4" objName="tag">
<TagClassProjectItem editable="1" guid="{b3236005-6f9b-ef4a-bb5d-0df15637e9a5}" name="Texturing">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="3a00a983-f8a1-d44e-8446-48fd5ba2e7c4" visible="1" name="Texturing">
<sets>
<Set title="" domainroot="tag">
<values>
@ -85,8 +85,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Layout" guid="{459777c3-87e1-b648-9f9e-48c63318e458}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Layout" guid="4289d2cd-5328-6b40-a897-f3ede4e816c7" objName="tag">
<TagClassProjectItem editable="1" guid="{459777c3-87e1-b648-9f9e-48c63318e458}" name="Layout">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="4289d2cd-5328-6b40-a897-f3ede4e816c7" visible="1" name="Layout">
<sets>
<Set title="" domainroot="tag">
<values>
@ -97,8 +97,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Build" guid="{9151f675-6785-d74f-9fcb-5ba1d3975213}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Build" guid="ad57f46d-7f01-8b46-a42d-e4f166d6c5a2" objName="tag">
<TagClassProjectItem editable="1" guid="{9151f675-6785-d74f-9fcb-5ba1d3975213}" name="Build">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="ad57f46d-7f01-8b46-a42d-e4f166d6c5a2" visible="1" name="Build">
<sets>
<Set title="" domainroot="tag">
<values>
@ -109,8 +109,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Painting" guid="{3f6a2f81-38ed-3a40-8dc1-8795d046ceb0}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Painting" guid="92531993-b3ef-f049-94da-0290fcb43877" objName="tag">
<TagClassProjectItem editable="1" guid="{3f6a2f81-38ed-3a40-8dc1-8795d046ceb0}" name="Painting">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="92531993-b3ef-f049-94da-0290fcb43877" visible="1" name="Painting">
<sets>
<Set title="" domainroot="tag">
<values>
@ -121,8 +121,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Rigging" guid="{32c40ffe-b951-db45-a06f-96aa1ee886c9}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Rigging" guid="ef53b66c-6389-f341-a548-98ab0f5dfd36" objName="tag">
<TagClassProjectItem editable="1" guid="{32c40ffe-b951-db45-a06f-96aa1ee886c9}" name="Rigging">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="ef53b66c-6389-f341-a548-98ab0f5dfd36" visible="1" name="Rigging">
<sets>
<Set title="" domainroot="tag">
<values>
@ -133,8 +133,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Match Move" guid="{458175b6-56c8-6241-a3c5-3bb15c7b4321}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Match Move" guid="2da532f7-6102-e648-9cc9-f897adde24fa" objName="tag">
<TagClassProjectItem editable="1" guid="{458175b6-56c8-6241-a3c5-3bb15c7b4321}" name="Match Move">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="2da532f7-6102-e648-9cc9-f897adde24fa" visible="1" name="Match Move">
<sets>
<Set title="" domainroot="tag">
<values>
@ -145,8 +145,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Compositing" guid="{4f432ee8-08b9-1541-b724-16da8d326575}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Compositing" guid="6dfee79f-109e-6943-86ee-e4868eebf885" objName="tag">
<TagClassProjectItem editable="1" guid="{4f432ee8-08b9-1541-b724-16da8d326575}" name="Compositing">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="6dfee79f-109e-6943-86ee-e4868eebf885" visible="1" name="Compositing">
<sets>
<Set title="" domainroot="tag">
<values>
@ -157,8 +157,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Lighting" guid="{3bc6599b-7095-f744-8f96-74a2fbbaba51}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Lighting" guid="2e295a1d-0730-4544-bc28-471e217295cf" objName="tag">
<TagClassProjectItem editable="1" guid="{3bc6599b-7095-f744-8f96-74a2fbbaba51}" name="Lighting">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="2e295a1d-0730-4544-bc28-471e217295cf" visible="1" name="Lighting">
<sets>
<Set title="" domainroot="tag">
<values>
@ -169,8 +169,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Lookdev" guid="{59cc88aa-30fb-d94b-9c6b-860585be1c5a}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Lookdev" guid="728df9b6-afc7-8d4f-b85e-0d944d484c73" objName="tag">
<TagClassProjectItem editable="1" guid="{59cc88aa-30fb-d94b-9c6b-860585be1c5a}" name="Lookdev">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="728df9b6-afc7-8d4f-b85e-0d944d484c73" visible="1" name="Lookdev">
<sets>
<Set title="" domainroot="tag">
<values>
@ -181,8 +181,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="Modeling" guid="{f3a97406-c1af-fe4a-a607-da3872d15f1b}">
<TagClass editable="1" icon="icons:Tag.png" visible="1" name="Modeling" guid="8440a540-145b-6b47-b935-18dcc0ca5766" objName="tag">
<TagClassProjectItem editable="1" guid="{f3a97406-c1af-fe4a-a607-da3872d15f1b}" name="Modeling">
<TagClass icon="icons:Tag.png" objName="tag" editable="1" guid="8440a540-145b-6b47-b935-18dcc0ca5766" visible="1" name="Modeling">
<sets>
<Set title="" domainroot="tag">
<values>
@ -199,10 +199,10 @@
<BinViewSortColumnIndex>0</BinViewSortColumnIndex>
<BinViewSortOrder>0</BinViewSortOrder>
</BinProjectItem>
<BinProjectItem editable="1" name="handles" guid="{d9f52354-348b-b940-b9d8-fb902c94a9be}">
<BinProjectItem editable="1" guid="{d9f52354-348b-b940-b9d8-fb902c94a9be}" name="handles">
<items>
<TagClassProjectItem editable="1" name="25 frames" guid="{ecd238d1-6d38-a740-ae24-b2ba84d1360c}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="25 frames" guid="172ca2e6-9351-f346-968c-cbcd72adcd43" objName="tag">
<TagClassProjectItem editable="1" guid="{ecd238d1-6d38-a740-ae24-b2ba84d1360c}" name="25 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="172ca2e6-9351-f346-968c-cbcd72adcd43" visible="1" name="25 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -214,8 +214,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="20 frames" guid="{3c1da268-6255-5e43-8564-14f5c4483c7d}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="20 frames" guid="e2918655-a7f2-fc42-9cb7-f402c95ace69" objName="tag">
<TagClassProjectItem editable="1" guid="{3c1da268-6255-5e43-8564-14f5c4483c7d}" name="20 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="e2918655-a7f2-fc42-9cb7-f402c95ace69" visible="1" name="20 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -227,8 +227,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="15 frames" guid="{5b502d49-cd75-3741-aa78-4f178049e9cd}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="15 frames" guid="36e70c47-29a8-9340-912c-1a1f70257618" objName="tag">
<TagClassProjectItem editable="1" guid="{5b502d49-cd75-3741-aa78-4f178049e9cd}" name="15 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="36e70c47-29a8-9340-912c-1a1f70257618" visible="1" name="15 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -240,8 +240,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="10 frames" guid="{eae75001-3b2f-1443-9687-dfbb6a381c55}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="10 frames" guid="a45bd02c-5f1e-c040-ad8c-0c6e124f55c0" objName="tag">
<TagClassProjectItem editable="1" guid="{eae75001-3b2f-1443-9687-dfbb6a381c55}" name="10 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="a45bd02c-5f1e-c040-ad8c-0c6e124f55c0" visible="1" name="10 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -253,8 +253,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="start: add 20 frames" guid="{39e0a5dc-9f30-8d45-b497-59af4a4e8f7d}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="start: add 20 frames" guid="8bfb4e13-42e7-4344-8b33-1df55ed5cc19" objName="tag">
<TagClassProjectItem editable="1" guid="{39e0a5dc-9f30-8d45-b497-59af4a4e8f7d}" name="start: add 20 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="8bfb4e13-42e7-4344-8b33-1df55ed5cc19" visible="1" name="start: add 20 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -268,8 +268,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="start: add 15 frames" guid="{02801652-2e46-f04e-a9bb-0be47591d731}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="start: add 15 frames" guid="9d2f5078-5ded-ab47-9be7-8f30b9362b0c" objName="tag">
<TagClassProjectItem editable="1" guid="{02801652-2e46-f04e-a9bb-0be47591d731}" name="start: add 15 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="9d2f5078-5ded-ab47-9be7-8f30b9362b0c" visible="1" name="start: add 15 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -283,8 +283,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="start: add 10 frames" guid="{b7415b6d-3b9c-924b-a6b9-0b4b20917c28}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="start: add 10 frames" guid="be4ae97e-d647-9145-bfd2-521a0ca48f80" objName="tag">
<TagClassProjectItem editable="1" guid="{b7415b6d-3b9c-924b-a6b9-0b4b20917c28}" name="start: add 10 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="be4ae97e-d647-9145-bfd2-521a0ca48f80" visible="1" name="start: add 10 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -298,8 +298,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="end: add 15 frames" guid="{4c146343-8f3d-6c43-9d49-6fc2fc8d860c}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="end: add 15 frames" guid="b07bda39-5339-b548-ae2f-54d791110cbe" objName="tag">
<TagClassProjectItem editable="1" guid="{4c146343-8f3d-6c43-9d49-6fc2fc8d860c}" name="end: add 15 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="b07bda39-5339-b548-ae2f-54d791110cbe" visible="1" name="end: add 15 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -313,8 +313,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="end: add 10 frames" guid="{1218eaee-7065-fa42-857d-3337a25d6a97}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="end: add 10 frames" guid="9c2bed9c-064a-3243-ad0f-8b7ac147a427" objName="tag">
<TagClassProjectItem editable="1" guid="{1218eaee-7065-fa42-857d-3337a25d6a97}" name="end: add 10 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="9c2bed9c-064a-3243-ad0f-8b7ac147a427" visible="1" name="end: add 10 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -328,8 +328,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="end: add 5 frames" guid="{b9b0373d-1461-094c-a1e1-26408b68378f}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="end: add 5 frames" guid="2466e187-aa71-804e-9ffb-1c1c57d5673c" objName="tag">
<TagClassProjectItem editable="1" guid="{b9b0373d-1461-094c-a1e1-26408b68378f}" name="end: add 5 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="2466e187-aa71-804e-9ffb-1c1c57d5673c" visible="1" name="end: add 5 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -343,8 +343,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="end: add 20 frames" guid="{81446970-d7b7-a142-970e-d7d48073b74a}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="end: add 20 frames" guid="8f2d87d5-47c3-154e-8236-4f0fe3e24216" objName="tag">
<TagClassProjectItem editable="1" guid="{81446970-d7b7-a142-970e-d7d48073b74a}" name="end: add 20 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="8f2d87d5-47c3-154e-8236-4f0fe3e24216" visible="1" name="end: add 20 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -358,8 +358,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="start: add 5 frames" guid="{383f69df-2421-d848-a4a6-8ed17386cb67}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="start: add 5 frames" guid="aec1eac2-1257-e64d-9fed-78afbee0dd31" objName="tag">
<TagClassProjectItem editable="1" guid="{383f69df-2421-d848-a4a6-8ed17386cb67}" name="start: add 5 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="aec1eac2-1257-e64d-9fed-78afbee0dd31" visible="1" name="start: add 5 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -373,8 +373,8 @@
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="5 frames" guid="{36e7472b-2ea6-8747-8181-f3bf46cfe04a}">
<TagClass editable="1" icon="icons:TagClapperBoard.png" visible="1" name="5 frames" guid="46e4f25b-b92f-414f-9c50-798f1905879f" objName="tag">
<TagClassProjectItem editable="1" guid="{36e7472b-2ea6-8747-8181-f3bf46cfe04a}" name="5 frames">
<TagClass icon="icons:TagClapperBoard.png" objName="tag" editable="1" guid="46e4f25b-b92f-414f-9c50-798f1905879f" visible="1" name="5 frames">
<sets>
<Set title="" domainroot="tag">
<values>
@ -392,47 +392,51 @@
<BinViewSortColumnIndex>0</BinViewSortColumnIndex>
<BinViewSortOrder>0</BinViewSortOrder>
</BinProjectItem>
<BinProjectItem editable="1" name="software" guid="{2896f84a-7b81-0a45-af56-01df16a42c80}">
<BinProjectItem editable="1" guid="{2896f84a-7b81-0a45-af56-01df16a42c80}" name="software">
<items>
<TagClassProjectItem editable="1" name="houdini" guid="{e56c84f8-4958-9d4b-b712-c752daa20d87}">
<TagClass editable="1" icon="houdini.png" visible="1" name="houdini" guid="bfcba753-4337-6549-a6bb-db96e67261f0" objName="tag">
<TagClassProjectItem editable="1" guid="{e56c84f8-4958-9d4b-b712-c752daa20d87}" name="houdini">
<TagClass icon="houdini.png" objName="tag" editable="1" guid="bfcba753-4337-6549-a6bb-db96e67261f0" visible="1" name="houdini">
<sets>
<Set title="" domainroot="tag">
<values>
<StringValue name="tag.label" default="1" value="houdini"/>
<StringValue name="tag.family" default="1" value="host"/>
</values>
</Set>
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="fusion" guid="{bcebc8dc-2725-2045-bfe3-678cd0cc14b2}">
<TagClass editable="1" icon="fusion.png" visible="1" name="fusion" guid="516c1100-11be-844d-842a-9e2f00a807d5" objName="tag">
<TagClassProjectItem editable="1" guid="{bcebc8dc-2725-2045-bfe3-678cd0cc14b2}" name="fusion">
<TagClass icon="fusion.png" objName="tag" editable="1" guid="516c1100-11be-844d-842a-9e2f00a807d5" visible="1" name="fusion">
<sets>
<Set title="" domainroot="tag">
<values>
<StringValue name="tag.label" default="1" value="fusion"/>
<StringValue name="tag.family" default="1" value="host"/>
</values>
</Set>
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="maya" guid="{1e8d1e85-7844-8c43-a0b1-be4fa10da068}">
<TagClass editable="1" icon="maya.png" visible="1" name="maya" guid="4bfb4372-c31d-6e4e-aedb-ff1611a487f8" objName="tag">
<TagClassProjectItem editable="1" guid="{1e8d1e85-7844-8c43-a0b1-be4fa10da068}" name="maya">
<TagClass icon="maya.png" objName="tag" editable="1" guid="4bfb4372-c31d-6e4e-aedb-ff1611a487f8" visible="1" name="maya">
<sets>
<Set title="" domainroot="tag">
<values>
<StringValue name="tag.label" default="1" value="maya"/>
<StringValue name="tag.family" default="1" value="host"/>
</values>
</Set>
</sets>
</TagClass>
</TagClassProjectItem>
<TagClassProjectItem editable="1" name="nuke" guid="{569a163e-3e00-3242-8be9-41aa4a9cbf5c}">
<TagClass editable="1" icon="nuke.png" visible="1" name="nuke" guid="1674dcb2-28b2-fe4d-8cc5-d979c3fa0ddd" objName="tag">
<TagClassProjectItem editable="1" guid="{569a163e-3e00-3242-8be9-41aa4a9cbf5c}" name="nuke">
<TagClass icon="nuke.png" objName="tag" editable="1" guid="1674dcb2-28b2-fe4d-8cc5-d979c3fa0ddd" visible="1" name="nuke">
<sets>
<Set title="" domainroot="tag">
<values>
<StringValue name="tag.label" default="1" value="nuke"/>
<StringValue name="tag.family" default="1" value="host"/>
</values>
</Set>
</sets>
@ -457,9 +461,9 @@
<BinViewSortColumnIndex>0</BinViewSortColumnIndex>
<BinViewSortOrder>0</BinViewSortOrder>
<AllowedItems>2</AllowedItems>
<RootBinProjectItem link="internal" guid="{a3ba3ce5-8d61-6240-a7b3-b99e4a8bbe9d}" objName="sequencesBin"/>
<RootBinProjectItem link="internal" guid="{74723746-d7a9-884f-9489-bf0cfe2137fa}" objName="tagsBin"/>
<MediaFormatValue name="" objName="outputformat" default="0" value="1,[ 0, 0, 1920, 1080],[ 0, 0, 1920, 1080],HD 1080"/>
<RootBinProjectItem link="internal" objName="sequencesBin" guid="{a3ba3ce5-8d61-6240-a7b3-b99e4a8bbe9d}"/>
<RootBinProjectItem link="internal" objName="tagsBin" guid="{74723746-d7a9-884f-9489-bf0cfe2137fa}"/>
<MediaFormatValue objName="outputformat" name="" default="0" value="1,[ 0, 0, 1920, 1080],[ 0, 0, 1920, 1080],HD 1080"/>
<Views>
<View color="#ffffff" name="main"/>
</Views>