Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Commit

Permalink
Merge pull request #298 from tokejepsen/2.x/feature/photoshop_review
Browse files Browse the repository at this point in the history
Photoshop: Publish review
  • Loading branch information
mkolar authored Jul 8, 2020
2 parents d4dc019 + 3c07d57 commit 8c5da04
Show file tree
Hide file tree
Showing 2 changed files with 139 additions and 0 deletions.
36 changes: 36 additions & 0 deletions pype/plugins/photoshop/publish/collect_review.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import os

import pythoncom

import pyblish.api


class CollectReview(pyblish.api.ContextPlugin):
"""Gather the active document as review instance."""

label = "Review"
order = pyblish.api.CollectorOrder
hosts = ["photoshop"]

def process(self, context):
# Necessary call when running in a different thread which pyblish-qml
# can be.
pythoncom.CoInitialize()

family = "review"
task = os.getenv("AVALON_TASK", None)
subset = family + task.capitalize()

file_path = context.data["currentFile"]
base_name = os.path.basename(file_path)

instance = context.create_instance(subset)
instance.data.update({
"subset": subset,
"label": base_name,
"name": base_name,
"family": family,
"families": ["ftrack"],
"representations": [],
"asset": os.environ["AVALON_ASSET"]
})
103 changes: 103 additions & 0 deletions pype/plugins/photoshop/publish/extract_review.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
import os

import pype.api
import pype.lib
from avalon import photoshop


class ExtractReview(pype.api.Extractor):
"""Produce a flattened image file from all instances."""

label = "Extract Review"
hosts = ["photoshop"]
families = ["review"]

def process(self, instance):

staging_dir = self.staging_dir(instance)
self.log.info("Outputting image to {}".format(staging_dir))

layers = []
for image_instance in instance.context:
if image_instance.data["family"] != "image":
continue
layers.append(image_instance[0])

# Perform extraction
output_image = "{} copy.jpg".format(
os.path.splitext(photoshop.app().ActiveDocument.Name)[0]
)
with photoshop.maintained_visibility():
# Hide all other layers.
extract_ids = [
x.id for x in photoshop.get_layers_in_layers(layers)
]
for layer in photoshop.get_layers_in_document():
if layer.id in extract_ids:
layer.Visible = True
else:
layer.Visible = False

photoshop.app().ActiveDocument.SaveAs(
staging_dir, photoshop.com_objects.JPEGSaveOptions(), True
)

instance.data["representations"].append({
"name": "jpg",
"ext": "jpg",
"files": output_image,
"stagingDir": staging_dir
})
instance.data["stagingDir"] = staging_dir

# Generate thumbnail.
thumbnail_path = os.path.join(staging_dir, "thumbnail.jpg")
args = [
"ffmpeg", "-y",
"-i", os.path.join(staging_dir, output_image),
"-vf", "scale=300:-1",
"-vframes", "1",
thumbnail_path
]
output = pype.lib._subprocess(args, cwd=os.environ["FFMPEG_PATH"])

self.log.debug(output)

instance.data["representations"].append({
"name": "thumbnail",
"ext": "jpg",
"files": os.path.basename(thumbnail_path),
"stagingDir": staging_dir,
"tags": ["thumbnail"]
})

# Generate mov.
mov_path = os.path.join(staging_dir, "review.mov")
args = [
"ffmpeg", "-y",
"-i", os.path.join(staging_dir, output_image),
"-vframes", "1",
mov_path
]
output = pype.lib._subprocess(args, cwd=os.environ["FFMPEG_PATH"])

self.log.debug(output)

instance.data["representations"].append({
"name": "mov",
"ext": "mov",
"files": os.path.basename(mov_path),
"stagingDir": staging_dir,
"frameStart": 1,
"frameEnd": 1,
"fps": 25,
"preview": True,
"tags": ["review", "ftrackreview"]
})

# Required for extract_review plugin (L222 onwards).
instance.data["frameStart"] = 1
instance.data["frameEnd"] = 1
instance.data["fps"] = 25

self.log.info(f"Extracted {instance} to {staging_dir}")

0 comments on commit 8c5da04

Please sign in to comment.