mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
feat(resolve): integration wip
This commit is contained in:
parent
0da0364221
commit
157a9e3498
14 changed files with 92 additions and 55 deletions
|
|
@ -1,5 +1,6 @@
|
|||
import os
|
||||
import traceback
|
||||
import importlib
|
||||
from pype.lib import PypeHook
|
||||
from pypeapp import Logger
|
||||
from pype.resolve import utils
|
||||
|
|
@ -60,6 +61,7 @@ class ResolvePrelaunch(PypeHook):
|
|||
|
||||
else:
|
||||
# Resolve Setup integration
|
||||
importlib.reload(utils)
|
||||
utils.setup(env)
|
||||
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import pyblish.api
|
||||
from python_get_resolve import GetResolve
|
||||
from pype.resolve.utils import get_resolve_module
|
||||
|
||||
|
||||
class CollectProject(pyblish.api.ContextPlugin):
|
||||
|
|
@ -10,7 +10,7 @@ class CollectProject(pyblish.api.ContextPlugin):
|
|||
hosts = ["resolve"]
|
||||
|
||||
def process(self, context):
|
||||
resolve = GetResolve()
|
||||
resolve = get_resolve_module()
|
||||
PM = resolve.GetProjectManager()
|
||||
P = PM.GetCurrentProject()
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
import sys
|
||||
from .utils import get_resolve_module
|
||||
|
||||
self = sys.modules[__name__]
|
||||
self.pm = None
|
||||
|
||||
|
||||
def get_project_manager():
|
||||
if not self.pm:
|
||||
resolve = get_resolve_module()
|
||||
self.pm = resolve.GetProjectManager()
|
||||
return self.pm
|
||||
|
|
@ -3,6 +3,18 @@ import sys
|
|||
|
||||
from Qt import QtWidgets, QtCore
|
||||
|
||||
from .pipeline import (
|
||||
publish,
|
||||
launch_workfiles_app,
|
||||
reload_pipeline
|
||||
)
|
||||
|
||||
from avalon.tools import (
|
||||
creator,
|
||||
loader,
|
||||
sceneinventory,
|
||||
libraryloader
|
||||
)
|
||||
|
||||
def load_stylesheet():
|
||||
path = os.path.join(os.path.dirname(__file__), "menu_style.qss")
|
||||
|
|
@ -23,10 +35,10 @@ class Spacer(QtWidgets.QWidget):
|
|||
|
||||
real_spacer = QtWidgets.QWidget(self)
|
||||
real_spacer.setObjectName("Spacer")
|
||||
real_spacer.setFixedHeight(int(height / 3))
|
||||
real_spacer.setFixedHeight(height)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout(self)
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
layout.setContentsMargins(0, 11, 0, 0)
|
||||
layout.addWidget(real_spacer)
|
||||
|
||||
self.setLayout(layout)
|
||||
|
|
@ -62,7 +74,7 @@ class PypeMenu(QtWidgets.QWidget):
|
|||
reload_pipeline_btn = QtWidgets.QPushButton("Reload pipeline", self)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout(self)
|
||||
layout.setContentsMargins(10, 10, 10, 10)
|
||||
layout.setContentsMargins(10, 20, 10, 20)
|
||||
|
||||
layout.addWidget(workfiles_btn)
|
||||
layout.addWidget(create_btn)
|
||||
|
|
@ -70,19 +82,19 @@ class PypeMenu(QtWidgets.QWidget):
|
|||
layout.addWidget(load_btn)
|
||||
layout.addWidget(inventory_btn)
|
||||
|
||||
layout.addWidget(Spacer(20, self))
|
||||
layout.addWidget(Spacer(11, self))
|
||||
|
||||
layout.addWidget(rename_btn)
|
||||
layout.addWidget(set_colorspace_btn)
|
||||
layout.addWidget(reset_resolution_btn)
|
||||
|
||||
layout.addWidget(Spacer(20, self))
|
||||
layout.addWidget(Spacer(11, self))
|
||||
|
||||
layout.addWidget(reload_pipeline_btn)
|
||||
|
||||
self.setLayout(layout)
|
||||
|
||||
workfiles_btn.clicked.connect(self.on_reload_pipeline_clicked)
|
||||
workfiles_btn.clicked.connect(self.on_workfile_clicked)
|
||||
create_btn.clicked.connect(self.on_create_clicked)
|
||||
publish_btn.clicked.connect(self.on_publish_clicked)
|
||||
load_btn.clicked.connect(self.on_load_clicked)
|
||||
|
|
@ -94,18 +106,23 @@ class PypeMenu(QtWidgets.QWidget):
|
|||
|
||||
def on_workfile_clicked(self):
|
||||
print("Clicked Workfile")
|
||||
launch_workfiles_app()
|
||||
|
||||
def on_create_clicked(self):
|
||||
print("Clicked Create")
|
||||
creator.show()
|
||||
|
||||
def on_publish_clicked(self):
|
||||
print("Clicked Publish")
|
||||
publish(None)
|
||||
|
||||
def on_load_clicked(self):
|
||||
print("Clicked Load")
|
||||
loader.show(use_context=True)
|
||||
|
||||
def on_inventory_clicked(self):
|
||||
print("Clicked Inventory")
|
||||
sceneinventory.show()
|
||||
|
||||
def on_rename_clicked(self):
|
||||
print("Clicked Rename")
|
||||
|
|
@ -118,6 +135,7 @@ class PypeMenu(QtWidgets.QWidget):
|
|||
|
||||
def on_reload_pipeline_clicked(self):
|
||||
print("Clicked Reload Pipeline")
|
||||
reload_pipeline()
|
||||
|
||||
|
||||
def launch_pype_menu():
|
||||
|
|
|
|||
|
|
@ -1,34 +1,29 @@
|
|||
QWidget {
|
||||
background-color: #3a3939;
|
||||
border-radius: 5;
|
||||
background-color: #282828;
|
||||
border-radius: 3;
|
||||
}
|
||||
|
||||
QPushButton {
|
||||
border: 1px solid #6d6d6d;
|
||||
border: 1px solid #090909;
|
||||
background-color: #201f1f;
|
||||
color: #6d6d6d;
|
||||
color: #ffffff;
|
||||
padding: 5;
|
||||
}
|
||||
|
||||
QPushButton:focus {
|
||||
background-color: "#272525";
|
||||
}
|
||||
|
||||
QPushButton:pressed {
|
||||
background-color: "#686464";
|
||||
color: #333333;
|
||||
background-color: "#171717";
|
||||
color: #d0d0d0;
|
||||
}
|
||||
|
||||
QPushButton:hover {
|
||||
color: #d0d0d0;
|
||||
background-color: "#343232";
|
||||
background-color: "#171717";
|
||||
color: #e64b3d;
|
||||
}
|
||||
|
||||
#PypeMenu {
|
||||
border: 1px solid #333333;
|
||||
border: 1px solid #fef9ef;
|
||||
}
|
||||
|
||||
#Spacer {
|
||||
padding: 10;
|
||||
background-color: #464646;
|
||||
background-color: #121212;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -150,8 +150,6 @@ def reload_pipeline():
|
|||
import importlib
|
||||
import pype.resolve
|
||||
|
||||
avalon.uninstall()
|
||||
|
||||
# get avalon config name
|
||||
config = os.getenv("AVALON_CONFIG", "pype")
|
||||
|
||||
|
|
@ -164,7 +162,6 @@ def reload_pipeline():
|
|||
"{}".format(config),
|
||||
"{}.resolve".format(config),
|
||||
"{}.resolve.lib".format(config),
|
||||
"{}.resolve.menu".format(config),
|
||||
"{}.resolve.plugin".format(config),
|
||||
"{}.resolve.pipeline".format(config)
|
||||
):
|
||||
|
|
@ -175,8 +172,6 @@ def reload_pipeline():
|
|||
except Exception as e:
|
||||
log.warning("Cannot reload module: {}".format(e))
|
||||
|
||||
avalon.install(pype.resolve)
|
||||
|
||||
|
||||
def publish(parent):
|
||||
"""Shorthand to publish from within host"""
|
||||
|
|
|
|||
|
|
@ -26,4 +26,7 @@ while True:
|
|||
log.info(f"Waiting {wait}s for Resolve to be open in project")
|
||||
wait += wait_delay
|
||||
else:
|
||||
print(f"Preloaded variables: \n\n\tResolve module: "
|
||||
f"`resolve` > {type(resolve)} \n\tProject manager: "
|
||||
f"`pm` > {type(pm)} \n\tCurrent project: `p` > {type(p)}")
|
||||
break
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ def main(env):
|
|||
return False
|
||||
|
||||
avalon.api.install(host_module)
|
||||
avalon.api.register_host("resolve")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
@ -12,13 +12,14 @@ from pypeapp import Logger
|
|||
|
||||
log = Logger().get_logger(__name__, "resolve")
|
||||
|
||||
UTILITY_SCRIPTS = os.path.join(
|
||||
os.path.dirname(__file__),
|
||||
"resolve_utility_scripts"
|
||||
)
|
||||
|
||||
self = sys.modules[__name__]
|
||||
self.bmd = None
|
||||
|
||||
def get_resolve_module():
|
||||
# dont run if already loaded
|
||||
if self.bmd:
|
||||
return self.bmd
|
||||
|
||||
try:
|
||||
"""
|
||||
The PYTHONPATH needs to be set correctly for this import
|
||||
|
|
@ -52,7 +53,7 @@ def get_resolve_module():
|
|||
"DaVinciResolveScript.py"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
try:
|
||||
import imp
|
||||
bmd = imp.load_source('DaVinciResolveScript', module_path)
|
||||
|
|
@ -68,8 +69,9 @@ def get_resolve_module():
|
|||
f"module is expected to be located in: {expected_path}")
|
||||
)
|
||||
sys.exit()
|
||||
|
||||
return bmd.scriptapp("Resolve")
|
||||
# assign global var and return
|
||||
self.bmd = bmd.scriptapp("Resolve")
|
||||
return self.bmd
|
||||
|
||||
|
||||
def _sync_utility_scripts(env=None):
|
||||
|
|
@ -81,10 +83,26 @@ def _sync_utility_scripts(env=None):
|
|||
if not env:
|
||||
env = os.environ
|
||||
|
||||
# initiate inputs
|
||||
scripts = {}
|
||||
us_env = env.get("RESOLVE_UTILITY_SCRIPTS_SOURCE_DIR")
|
||||
us_dir = env.get("RESOLVE_UTILITY_SCRIPTS_DIR", "")
|
||||
scripts = os.listdir(UTILITY_SCRIPTS)
|
||||
us_paths = [os.path.join(
|
||||
os.path.dirname(__file__),
|
||||
"utility_scripts"
|
||||
)]
|
||||
|
||||
log.info(f"Utility Scripts Dir: `{UTILITY_SCRIPTS}`")
|
||||
# collect script dirs
|
||||
if us_env:
|
||||
log.info(f"Utility Scripts Env: `{us_env}`")
|
||||
us_paths = us_env.split(
|
||||
os.pathsep) + us_paths
|
||||
|
||||
# collect scripts from dirs
|
||||
for path in us_paths:
|
||||
scripts.update({path: os.listdir(path)})
|
||||
|
||||
log.info(f"Utility Scripts Dir: `{us_paths}`")
|
||||
log.info(f"Utility Scripts: `{scripts}`")
|
||||
|
||||
# make sure no script file is in folder
|
||||
|
|
@ -95,11 +113,14 @@ def _sync_utility_scripts(env=None):
|
|||
os.remove(path)
|
||||
|
||||
# copy scripts into Resolve's utility scripts dir
|
||||
for s in scripts:
|
||||
src = os.path.join(UTILITY_SCRIPTS, s)
|
||||
dst = os.path.join(us_dir, s)
|
||||
log.info(f"Copying `{src}` to `{dst}`...")
|
||||
shutil.copy2(src, dst)
|
||||
for d, sl in scripts.items():
|
||||
# directory and scripts list
|
||||
for s in sl:
|
||||
# script in script list
|
||||
src = os.path.join(d, s)
|
||||
dst = os.path.join(us_dir, s)
|
||||
log.info(f"Copying `{src}` to `{dst}`...")
|
||||
shutil.copy2(src, dst)
|
||||
|
||||
|
||||
def setup(env=None):
|
||||
|
|
|
|||
|
|
@ -1,24 +1,14 @@
|
|||
"""Host API required Work Files tool"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from pypeapp import Logger
|
||||
from .utils import get_resolve_module
|
||||
from .lib import get_project_manager
|
||||
|
||||
|
||||
log = Logger().get_logger(__name__, "nukestudio")
|
||||
|
||||
exported_projet_ext = ".drp"
|
||||
|
||||
self = sys.modules[__name__]
|
||||
self.pm = None
|
||||
|
||||
|
||||
def get_project_manager():
|
||||
if not self.pm:
|
||||
resolve = get_resolve_module()
|
||||
self.pm = resolve.GetProjectManager()
|
||||
return self.pm
|
||||
|
||||
|
||||
def file_extensions():
|
||||
return [exported_projet_ext]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue