add hierarchical option for playblasts

This commit is contained in:
Milan Kolar 2018-12-10 17:08:19 +01:00
parent 1c4648d6ee
commit 5bfacad2a3
7 changed files with 144 additions and 99 deletions

View file

@ -28,6 +28,7 @@ class IntegrateFtrackApi(pyblish.api.InstancePlugin):
queries = []
for key, value in data.iteritems():
if not isinstance(value, (basestring, int)):
self.log.info(value)
if "id" in value.keys():
queries.append(
"{0}.id is \"{1}\"".format(key, value["id"])

View file

@ -24,7 +24,8 @@ class IntegrateFtrackInstance(pyblish.api.InstancePlugin):
'setdress': 'setdress',
'pointcache': 'cache',
'write': 'img',
'render': 'render'}
'render': 'render',
'review': 'mov'}
def process(self, instance):
@ -43,9 +44,7 @@ class IntegrateFtrackInstance(pyblish.api.InstancePlugin):
dst_list = instance.data['destination_list']
ft_session = instance.context.data["ftrackSession"]
location = ft_session.query(
'Location where name is "ftrack.unmanaged"').one()
self.log.debug('location {}'.format(location))
for file in instance.data['destination_list']:
self.log.debug('file {}'.format(file))
@ -53,18 +52,34 @@ class IntegrateFtrackInstance(pyblish.api.InstancePlugin):
for file in dst_list:
filename, ext = os.path.splitext(file)
self.log.debug('dest ext: ' + ext)
thumbnail = False
if family == 'review':
component_name = "ftrackreview-mp4"
if ext in ['.mov']:
location = ft_session.query(
'Location where name is "ftrack.server"').one()
metadata = {'ftr_meta': json.dumps({
'frameIn': int(instance.data["startFrame"]),
'frameOut': int(instance.data["startFrame"]),
'frameRate': 25})}
'Location where name is "ftrack.server"').one()
component_data = {
"name": "ftrackreview-mp4", # Default component name is "main".
"metadata": {'ftr_meta': json.dumps({
'frameIn': int(instance.data["startFrame"]),
'frameOut': int(instance.data["startFrame"]),
'frameRate': 25})}
}
elif ext in [".jpg"]:
component_data = {
"name": "thumbnail" # Default component name is "main".
}
thumbnail = True
location = ft_session.query(
'Location where name is "ftrack.server"').one()
else:
component_name = ext[1:]
metadata = None
component_data = {
"name": ext[1:] # Default component name is "main".
}
location = ft_session.query(
'Location where name is "ftrack.unmanaged"').one()
self.log.debug('location {}'.format(location))
componentList.append({"assettype_data": {
"short": asset_type,
@ -75,13 +90,11 @@ class IntegrateFtrackInstance(pyblish.api.InstancePlugin):
"assetversion_data": {
"version": version_number,
},
"component_data": {
"name": component_name, # Default component name is "main".
"metadata": metadata
},
"component_data": component_data,
"component_path": file,
'component_location': location,
"component_overwrite": False
"component_overwrite": False,
"thumbnail": thumbnail
}
)

View file

@ -4,7 +4,7 @@ import clique
import json
class IntegrateFtrackInstance(pyblish.api.InstancePlugin):
class IntegrateFtrackReview(pyblish.api.InstancePlugin):
"""Collect ftrack component data
Add ftrack component list to instance.
@ -13,75 +13,73 @@ class IntegrateFtrackInstance(pyblish.api.InstancePlugin):
"""
order = pyblish.api.IntegratorOrder + 0.48
label = 'Integrate Ftrack Component'
label = 'Integrate Ftrack Review'
families = ['review', 'ftrack']
family_mapping = {'camera': 'cam',
'look': 'look',
'mayaAscii': 'scene',
'model': 'geo',
'rig': 'rig',
'setdress': 'setdress',
'pointcache': 'cache',
'review': 'mov',
'write': 'img',
'render': 'render'}
family_mapping = {'review': 'mov'
}
def process(self, instance):
self.log.debug('instance {}'.format(instance))
assumed_data = instance.data["assumedTemplateData"]
assumed_version = assumed_data["version"]
version_number = int(assumed_version)
family = instance.data['family'].lower()
asset_type = ''
asset_type = self.family_mapping[family]
componentList = []
dst_list = instance.data['destination_list']
ft_session = instance.context.data["ftrackSession"]
for file in instance.data['destination_list']:
self.log.debug('file {}'.format(file))
for file in dst_list:
filename, ext = os.path.splitext(file)
self.log.debug('dest ext: ' + ext)
component_name = "ftrackreview-mp4"
location = ft_session.query(
'Location where name is "ftrack.server"').one()
metadata = {'ftr_meta': json.dumps({
'frameIn': int(instance.data["startFrame"]),
'frameOut': int(instance.data["startFrame"]),
'frameRate': 25})}
componentList.append({"assettype_data": {
"short": asset_type,
},
"asset_data": {
"name": instance.data["subset"],
},
"assetversion_data": {
"version": version_number,
},
"component_data": {
"name": component_name, # Default component name is "main".
"metadata": metadata
},
"component_path": file,
'component_location': location,
"component_overwrite": False
}
)
self.log.debug('componentsList: {}'.format(str(componentList)))
instance.data["ftrackComponentsList"] = componentList
#
# assumed_data = instance.data["assumedTemplateData"]
# assumed_version = assumed_data["version"]
# version_number = int(assumed_version)
# family = instance.data['family'].lower()
# asset_type = ''
#
# asset_type = self.family_mapping[family]
#
# componentList = []
#
# dst_list = instance.data['destination_list']
#
# ft_session = instance.context.data["ftrackSession"]
#
#
# for file in instance.data['destination_list']:
# self.log.debug('file {}'.format(file))
#
# for file in dst_list:
# filename, ext = os.path.splitext(file)
# self.log.debug('dest ext: ' + ext)
#
# if ext == '.mov':
# component_name = "ftrackreview-mp4"
# metadata = {'ftr_meta': json.dumps({
# 'frameIn': int(instance.data["startFrame"]),
# 'frameOut': int(instance.data["startFrame"]),
# 'frameRate': 25})}
# thumbnail = False
#
# else:
# component_name = "thumbnail"
# thumbnail = True
#
# location = ft_session.query(
# 'Location where name is "ftrack.server"').one()
#
# componentList.append({"assettype_data": {
# "short": asset_type,
# },
# "asset_data": {
# "name": instance.data["subset"],
# },
# "assetversion_data": {
# "version": version_number,
# },
# "component_data": {
# "name": component_name, # Default component name is "main".
# "metadata": metadata
# },
# "component_path": file,
# 'component_location': location,
# "component_overwrite": False,
# "thumbnail": thumbnail
# }
# )
#
#
# self.log.debug('componentsList: {}'.format(str(componentList)))
# instance.data["ftrackComponentsList"] = componentList

View file

@ -46,6 +46,8 @@ class CollectInstances(pyblish.api.ContextPlugin):
objectset = cmds.ls("*.id", long=True, type="objectSet",
recursive=True, objectsOnly=True)
context.data['objectsets'] = objectset
for objset in objectset:
if not cmds.attributeQuery("id", node=objset, exists=True):

View file

@ -1,6 +1,8 @@
from maya import cmds
import pymel.core as pm
import pyblish.api
import avalon.api
class CollectReviewData(pyblish.api.InstancePlugin):
"""Collect Review data
@ -15,3 +17,36 @@ class CollectReviewData(pyblish.api.InstancePlugin):
# make ftrack publishable
instance.data["families"] = ['ftrack']
context = instance.context
task = avalon.api.Session["AVALON_TASK"]
# pseudo code
# get cameras
members = instance.data['setMembers']
cameras = cmds.ls(members, long=True,
dag=True, cameras=True)
self.log.debug('members: {}'.format(members))
# validate required settings
assert len(cameras) == 1, "Not a single camera found in extraction"
camera = cameras[0]
self.log.debug('camera: {}'.format(camera))
objectset = context.data['objectsets']
reviewable_subset = None
reviewable_subset = list(set(members) & set(objectset))
assert len(reviewable_subset) == 1, "Multiple subsets for review"
self.log.debug('subset for review: {}'.format(reviewable_subset))
for inst in context:
self.log.debug('instance: {}'.format(instance))
if inst.name == reviewable_subset[0]:
inst.data['families'].append('review')
inst.data['review_camera'] = camera
self.log.info('adding review family to {}'.format(reviewable_subset))
cmds.setAttr(str(instance) + '.active', 0)
instance.data['subset'] = task + 'Review'
instance.data['review_camera'] = camera

View file

@ -39,6 +39,7 @@ class ExtractQuicktime(pype.api.Extractor):
label = "Quicktime"
hosts = ["maya"]
families = ["review"]
optional = True
def process(self, instance):
self.log.info("Extracting capture..")
@ -53,12 +54,13 @@ class ExtractQuicktime(pype.api.Extractor):
# get cameras
members = instance.data['setMembers']
cameras = cmds.ls(members, leaf=True, shapes=True, long=True,
dag=True, type="camera")
camera = instance.data['review_camera']
# cameras = cmds.ls(members, leaf=True, shapes=True, long=True,
# dag=True, type="camera")
# validate required settings
assert len(cameras) == 1, "Not a single camera found in extraction"
camera = cameras[0]
# # validate required settings
# assert len(cameras) == 1, "Not a single camera found in extraction"
# camera = cameras[0]
# project_code = ftrack_data['Project']['code']

View file

@ -47,14 +47,8 @@ class ExtractThumbnail(pype.api.Extractor):
end = cmds.currentTime(query=True)
self.log.info("start: {}, end: {}".format(start, end))
# get cameras
members = instance.data['setMembers']
cameras = cmds.ls(members, leaf=True, shapes=True, long=True,
dag=True, type="camera")
# validate required settings
assert len(cameras) == 1, "Not a single camera found in extraction"
camera = cameras[0]
camera = instance.data['review_camera']
# project_code = ftrack_data['Project']['code']
@ -134,9 +128,9 @@ class ExtractThumbnail(pype.api.Extractor):
with maintained_time():
playblast = capture_gui.lib.capture_scene(preset)
thumbnail = filename + ".jpg"
_, thumbnail = os.path.split(playblast)
self.log.info("file list {}".format(playblast))
self.log.info("file list {}".format(thumbnail))
# self.log.info("Calculating HUD data overlay")
# stagingdir = "C:/Users/milan.kolar/AppData/Local/Temp/pyblish_tmp_ucsymm"