Merge pull request #516 from ynput/chore/AY-4916_Move-Houdini-client-code

Move houdini client code
This commit is contained in:
Ondřej Samohel 2024-06-03 13:59:53 +02:00 committed by GitHub
commit 750ad82744
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
139 changed files with 512 additions and 443 deletions

View file

@ -63,6 +63,7 @@ MOVED_ADDON_MILESTONE_VERSIONS = {
"nuke": VersionInfo(0, 2, 0),
"resolve": VersionInfo(0, 2, 0),
"substancepainter": VersionInfo(0, 2, 0),
"houdini": VersionInfo(0, 3, 0),
}

View file

@ -1,6 +1,6 @@
import attr
import hou
from ayon_core.hosts.houdini.api.lib import get_color_management_preferences
from ayon_houdini.api.lib import get_color_management_preferences
from ayon_core.pipeline.colorspace import get_display_view_colorspace_name
@attr.s

View file

@ -35,7 +35,7 @@ CATEGORY_GENERIC_TOOL = {
CREATE_SCRIPT = """
from ayon_core.hosts.houdini.api.creator_node_shelves import create_interactive
from ayon_houdini.api.creator_node_shelves import create_interactive
create_interactive("{identifier}", **kwargs)
"""
@ -153,7 +153,7 @@ def install():
This function is re-entrant and can be called again to reinstall and
update the node definitions. For example during development it can be
useful to call it manually:
>>> from ayon_core.hosts.houdini.api.creator_node_shelves import install
>>> from ayon_houdini.api.creator_node_shelves import install
>>> install()
Returns:

View file

@ -1027,7 +1027,7 @@ def add_self_publish_button(node):
button_parm = hou.ButtonParmTemplate(
"ayon_self_publish",
"{} Publish".format(label),
script_callback="from ayon_core.hosts.houdini.api.lib import "
script_callback="from ayon_houdini.api.lib import "
"self_publish; self_publish()",
script_callback_language=hou.scriptLanguage.Python,
join_with_next=True
@ -1070,7 +1070,7 @@ def sceneview_snapshot(
Example:
This is how the function can be used::
from ayon_core.hosts.houdini.api import lib
from ayon_houdini.api import lib
sceneview = hou.ui.paneTabOfType(hou.paneTabType.SceneViewer)
lib.sceneview_snapshot(sceneview)

View file

@ -17,8 +17,8 @@ from ayon_core.pipeline import (
AYON_CONTAINER_ID,
)
from ayon_core.pipeline.load import any_outdated_containers
from ayon_core.hosts.houdini import HOUDINI_HOST_DIR
from ayon_core.hosts.houdini.api import lib, shelves, creator_node_shelves
from ayon_houdini import HOUDINI_HOST_DIR
from ayon_houdini.api import lib, shelves, creator_node_shelves
from ayon_core.lib import (
register_event_callback,
@ -26,7 +26,7 @@ from ayon_core.lib import (
)
log = logging.getLogger("ayon_core.hosts.houdini")
log = logging.getLogger("ayon_houdini")
AVALON_CONTAINERS = "/obj/AVALON_CONTAINERS"
CONTEXT_CONTAINER = "/obj/OpenPypeContext"

View file

@ -7,6 +7,7 @@ from abc import (
import six
import hou
import pyblish.api
from ayon_core.pipeline import (
CreatorError,
LegacyCreator,
@ -14,11 +15,17 @@ from ayon_core.pipeline import (
CreatedInstance,
AYON_INSTANCE_ID,
AVALON_INSTANCE_ID,
load,
publish
)
from ayon_core.lib import BoolDef
from .lib import imprint, read, lsattr, add_self_publish_button
SETTINGS_CATEGORY = "houdini"
class Creator(LegacyCreator):
"""Creator plugin to create instances in Houdini
@ -169,6 +176,8 @@ class HoudiniCreator(NewCreator, HoudiniCreatorBase):
settings_name = None
add_publish_button = False
settings_category = SETTINGS_CATEGORY
def create(self, product_name, instance_data, pre_create_data):
try:
self.selected_nodes = []
@ -347,3 +356,39 @@ class HoudiniCreator(NewCreator, HoudiniCreatorBase):
for key, value in settings.items():
setattr(self, key, value)
class HoudiniLoader(load.LoaderPlugin):
"""Base class for Houdini load plugins."""
hosts = ["houdini"]
settings_category = SETTINGS_CATEGORY
class HoudiniInstancePlugin(pyblish.api.InstancePlugin):
"""Base class for Houdini instance publish plugins."""
hosts = ["houdini"]
settings_category = SETTINGS_CATEGORY
class HoudiniContextPlugin(pyblish.api.ContextPlugin):
"""Base class for Houdini context publish plugins."""
hosts = ["houdini"]
settings_category = SETTINGS_CATEGORY
class HoudiniExtractorPlugin(publish.Extractor):
"""Base class for Houdini extract plugins.
Note:
The `HoudiniExtractorPlugin` is a subclass of `publish.Extractor`,
which in turn is a subclass of `pyblish.api.InstancePlugin`.
Should there be a requirement to create an extractor that operates
as a context plugin, it would be beneficial to incorporate
the functionalities present in `publish.Extractor`.
"""
hosts = ["houdini"]
settings_category = SETTINGS_CATEGORY

View file

@ -12,7 +12,7 @@ import hou
from .lib import get_current_context_template_data_with_folder_attrs
log = logging.getLogger("ayon_core.hosts.houdini.shelves")
log = logging.getLogger("ayon_houdini.shelves")
def generate_shelves():

View file

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
"""Converter for legacy Houdini products."""
from ayon_core.pipeline.create.creator_plugins import ProductConvertorPlugin
from ayon_core.hosts.houdini.api.lib import imprint
from ayon_houdini.api.lib import imprint
class HoudiniLegacyConvertor(ProductConvertorPlugin):

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating alembic camera products."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.pipeline import CreatorError
import hou

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating Arnold ASS files."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import BoolDef

View file

@ -1,4 +1,4 @@
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import EnumDef, BoolDef

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating pointcache bgeo files."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.pipeline import CreatorError
import hou
from ayon_core.lib import EnumDef, BoolDef

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating composite sequences."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.pipeline import CreatorError
import hou

View file

@ -3,7 +3,7 @@
import ayon_api
from ayon_core.pipeline import CreatorError
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
import hou

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin to create Karma ROP."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import BoolDef, EnumDef, NumberDef

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating pointcache alembics."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import BoolDef

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin to create Mantra ROP."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import EnumDef, BoolDef

View file

@ -11,7 +11,7 @@ Note:
It's considered to support multiple representations in the future.
"""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import BoolDef
import hou

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating pointcache alembics."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import BoolDef
import hou
@ -105,7 +105,7 @@ class CreatePointCache(plugin.HoudiniCreator):
elif len(outputs) == 1:
return outputs[0]
# if there are more than one, then it have multiple ouput nodes
# if there are more than one, then it have multiple output nodes
# return the one with the minimum 'outputidx'
else:
return min(outputs,

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating Redshift proxies."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
import hou
from ayon_core.lib import BoolDef

View file

@ -3,7 +3,7 @@
import hou # noqa
from ayon_core.pipeline import CreatorError
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import EnumDef, BoolDef

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating openGL reviews."""
from ayon_core.hosts.houdini.api import lib, plugin
from ayon_houdini.api import lib, plugin
from ayon_core.lib import EnumDef, BoolDef, NumberDef
import os
@ -103,7 +103,7 @@ class CreateReview(plugin.HoudiniCreator):
# cls.review_color_space is an empty string
# when the imageio/workfile setting is disabled or
# when the Review colorspace setting is empty.
from ayon_core.hosts.houdini.api.colorspace import get_default_display_view_colorspace # noqa
from ayon_houdini.api.colorspace import get_default_display_view_colorspace # noqa
self.review_color_space = get_default_display_view_colorspace()
lib.set_review_color_space(instance_node,

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator for Unreal Static Meshes."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import BoolDef, EnumDef
import hou

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating USDs."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
import hou

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating USD renders."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
class CreateUSDRender(plugin.HoudiniCreator):

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""Creator plugin for creating VDB Caches."""
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.lib import BoolDef
import hou

View file

@ -2,7 +2,7 @@
"""Creator plugin to create VRay ROP."""
import hou
from ayon_core.hosts.houdini.api import plugin
from ayon_houdini.api import plugin
from ayon_core.pipeline import CreatorError
from ayon_core.lib import EnumDef, BoolDef

View file

@ -2,9 +2,9 @@
"""Creator plugin for creating workfiles."""
import ayon_api
from ayon_core.hosts.houdini.api import plugin
from ayon_core.hosts.houdini.api.lib import read, imprint
from ayon_core.hosts.houdini.api.pipeline import CONTEXT_CONTAINER
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import read, imprint
from ayon_houdini.api.pipeline import CONTEXT_CONTAINER
from ayon_core.pipeline import CreatedInstance, AutoCreator
import hou

View file

@ -1,5 +1,5 @@
from ayon_core.pipeline import InventoryAction
from ayon_core.hosts.houdini.api.lib import (
from ayon_houdini.api.lib import (
get_camera_from_container,
set_camera_resolution
)

View file

@ -2,10 +2,10 @@
"""
from ayon_core.pipeline import load
from ayon_houdini.api import plugin
class SetFrameRangeLoader(load.LoaderPlugin):
class SetFrameRangeLoader(plugin.HoudiniLoader):
"""Set frame range excluding pre- and post-handles"""
product_types = {
@ -42,7 +42,7 @@ class SetFrameRangeLoader(load.LoaderPlugin):
hou.playbar.setPlaybackRange(start, end)
class SetFrameRangeWithHandlesLoader(load.LoaderPlugin):
class SetFrameRangeWithHandlesLoader(plugin.HoudiniLoader):
"""Set frame range including pre- and post-handles"""
product_types = {

View file

@ -1,12 +1,12 @@
import os
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_core.hosts.houdini.api import pipeline
class AbcLoader(load.LoaderPlugin):
class AbcLoader(plugin.HoudiniLoader):
"""Load Alembic"""
product_types = {"model", "animation", "pointcache", "gpuCache"}

View file

@ -1,12 +1,13 @@
import os
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_core.hosts.houdini.api import pipeline
class AbcArchiveLoader(load.LoaderPlugin):
class AbcArchiveLoader(plugin.HoudiniLoader):
"""Load Alembic as full geometry network hierarchy """
product_types = {"model", "animation", "pointcache", "gpuCache"}

View file

@ -1,14 +1,14 @@
import os
import re
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_core.hosts.houdini.api import pipeline
class AssLoader(load.LoaderPlugin):
class AssLoader(plugin.HoudiniLoader):
"""Load .ass with Arnold Procedural"""
product_types = {"ass"}

View file

@ -2,14 +2,14 @@
import os
import re
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_core.hosts.houdini.api import pipeline
class BgeoLoader(load.LoaderPlugin):
class BgeoLoader(plugin.HoudiniLoader):
"""Load bgeo files to Houdini."""
label = "Load bgeo"

View file

@ -1,16 +1,15 @@
from ayon_core.pipeline import (
load,
get_representation_path,
)
from ayon_core.hosts.houdini.api import pipeline
import hou
from ayon_core.pipeline import get_representation_path
from ayon_core.hosts.houdini.api.lib import (
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_houdini.api.lib import (
set_camera_resolution,
get_camera_from_container
)
import hou
ARCHIVE_EXPRESSION = ('__import__("_alembic_hom_extensions")'
'.alembicGetCameraDict')
@ -84,7 +83,7 @@ def transfer_non_default_values(src, dest, ignore=None):
dest_parm.setFromParm(parm)
class CameraLoader(load.LoaderPlugin):
class CameraLoader(plugin.HoudiniLoader):
"""Load camera from an Alembic file"""
product_types = {"camera"}

View file

@ -1,13 +1,13 @@
# -*- coding: utf-8 -*-
"""Fbx Loader for houdini. """
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_core.hosts.houdini.api import pipeline
class FbxLoader(load.LoaderPlugin):
class FbxLoader(plugin.HoudiniLoader):
"""Load fbx files. """
label = "Load FBX"

View file

@ -1,13 +1,14 @@
import os
import re
from ayon_core.pipeline import load
from ayon_core.hosts.houdini.api import pipeline
import hou
from ayon_houdini.api import (
pipeline,
plugin
)
class FilePathLoader(load.LoaderPlugin):
class FilePathLoader(plugin.HoudiniLoader):
"""Load a managed filepath to a null node.
This is useful if for a particular workflow there is no existing loader

View file

@ -1,13 +1,13 @@
# -*- coding: utf-8 -*-
import os
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_core.hosts.houdini.api import pipeline
class HdaLoader(load.LoaderPlugin):
class HdaLoader(plugin.HoudiniLoader):
"""Load Houdini Digital Asset file."""
product_types = {"hda"}

View file

@ -1,14 +1,16 @@
import os
import re
import hou
from ayon_core.pipeline import (
load,
get_representation_path,
AVALON_CONTAINER_ID,
)
from ayon_core.hosts.houdini.api import lib, pipeline
import hou
from ayon_houdini.api import (
pipeline,
plugin,
lib
)
def get_image_avalon_container():
@ -42,7 +44,7 @@ def get_image_avalon_container():
return image_container
class ImageLoader(load.LoaderPlugin):
class ImageLoader(plugin.HoudiniLoader):
"""Load images into COP2"""
product_types = {

View file

@ -1,16 +1,17 @@
import os
import re
from ayon_core.pipeline import (
load,
get_representation_path,
)
from ayon_core.hosts.houdini.api import pipeline
from ayon_core.pipeline.load import LoadError
import hou
from ayon_core.pipeline import get_representation_path
from ayon_core.pipeline.load import LoadError
class RedshiftProxyLoader(load.LoaderPlugin):
from ayon_houdini.api import (
pipeline,
plugin
)
class RedshiftProxyLoader(plugin.HoudiniLoader):
"""Load Redshift Proxy"""
product_types = {"redshiftproxy"}

View file

@ -1,12 +1,14 @@
from ayon_core.pipeline import (
load,
get_representation_path,
AVALON_CONTAINER_ID,
)
from ayon_core.hosts.houdini.api import lib
from ayon_houdini.api import (
plugin,
lib
)
class USDSublayerLoader(load.LoaderPlugin):
class USDSublayerLoader(plugin.HoudiniLoader):
"""Sublayer USD file in Solaris"""
product_types = {

View file

@ -1,12 +1,14 @@
from ayon_core.pipeline import (
load,
get_representation_path,
AVALON_CONTAINER_ID,
)
from ayon_core.hosts.houdini.api import lib
from ayon_houdini.api import (
plugin,
lib
)
class USDReferenceLoader(load.LoaderPlugin):
class USDReferenceLoader(plugin.HoudiniLoader):
"""Reference USD file in Solaris"""
product_types = {

View file

@ -1,10 +1,12 @@
import os
from ayon_core.pipeline import load
from ayon_core.hosts.houdini.api import pipeline
from ayon_houdini.api import (
pipeline,
plugin
)
class SopUsdImportLoader(load.LoaderPlugin):
class SopUsdImportLoader(plugin.HoudiniLoader):
"""Load USD to SOPs via `usdimport`"""
label = "Load USD to SOPs"

View file

@ -1,14 +1,14 @@
import os
import re
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_core.hosts.houdini.api import pipeline
class VdbLoader(load.LoaderPlugin):
class VdbLoader(plugin.HoudiniLoader):
"""Load VDB"""
product_types = {"vdbcache"}

View file

@ -3,10 +3,10 @@ import platform
import subprocess
from ayon_core.lib.vendor_bin_utils import find_executable
from ayon_core.pipeline import load
from ayon_houdini.api import plugin
class ShowInUsdview(load.LoaderPlugin):
class ShowInUsdview(plugin.HoudiniLoader):
"""Open USD file in usdview"""
label = "Show in usdview"

View file

@ -1,8 +1,10 @@
import pyblish.api
import hou
import pyblish.api
from ayon_houdini.api import plugin
class CollectInstanceActiveState(pyblish.api.InstancePlugin):
class CollectInstanceActiveState(plugin.HoudiniInstancePlugin):
"""Collect default active state for instance from its node bypass state.
This is done at the very end of the CollectorOrder so that any required
@ -14,7 +16,6 @@ class CollectInstanceActiveState(pyblish.api.InstancePlugin):
order = pyblish.api.CollectorOrder + 0.299
families = ["*"]
hosts = ["houdini"]
label = "Instance Active State"
def process(self, instance):

View file

@ -4,12 +4,14 @@ import re
import hou
import pyblish.api
from ayon_core.hosts.houdini.api import colorspace
from ayon_core.hosts.houdini.api.lib import (
evalParmNoFrame, get_color_management_preferences)
from ayon_houdini.api import colorspace, plugin
from ayon_houdini.api.lib import (
get_color_management_preferences,
evalParmNoFrame
)
class CollectArnoldROPRenderProducts(pyblish.api.InstancePlugin):
class CollectArnoldROPRenderProducts(plugin.HoudiniInstancePlugin):
"""Collect Arnold ROP Render Products
Collects the instance.data["files"] for the render products.
@ -23,7 +25,6 @@ class CollectArnoldROPRenderProducts(pyblish.api.InstancePlugin):
# This specific order value is used so that
# this plugin runs after CollectFrames
order = pyblish.api.CollectorOrder + 0.11
hosts = ["houdini"]
families = ["arnold_rop"]
def process(self, instance):

View file

@ -1,12 +1,12 @@
# -*- coding: utf-8 -*-
"""Collector plugin for frames data on ROP instances."""
import hou # noqa
import pyblish.api
from ayon_core.lib import BoolDef
from ayon_core.pipeline import AYONPyblishPluginMixin
from ayon_houdini.api import plugin
class CollectAssetHandles(pyblish.api.InstancePlugin,
class CollectAssetHandles(plugin.HoudiniInstancePlugin,
AYONPyblishPluginMixin):
"""Apply folder handles.
@ -23,8 +23,6 @@ class CollectAssetHandles(pyblish.api.InstancePlugin,
the exclusive frame range and actual handle ranges.
"""
hosts = ["houdini"]
# This specific order value is used so that
# this plugin runs after CollectAnatomyInstanceData
order = pyblish.api.CollectorOrder + 0.499

View file

@ -1,10 +1,13 @@
import os
import pyblish.api
import hou
from ayon_core.hosts.houdini.api import lib
import pyblish.api
from ayon_houdini.api import (
lib,
plugin
)
class CollectDataforCache(pyblish.api.InstancePlugin):
class CollectDataforCache(plugin.HoudiniInstancePlugin):
"""Collect data for caching to Deadline."""
# Run after Collect Frames
@ -12,7 +15,6 @@ class CollectDataforCache(pyblish.api.InstancePlugin):
families = ["ass", "pointcache",
"mantraifd", "redshiftproxy",
"vdbcache", "model"]
hosts = ["houdini"]
targets = ["local", "remote"]
label = "Collect Data for Cache"

View file

@ -1,9 +1,10 @@
import pyblish.api
from ayon_core.lib import NumberDef
from ayon_core.pipeline import AYONPyblishPluginMixin
from ayon_houdini.api import plugin
class CollectChunkSize(pyblish.api.InstancePlugin,
class CollectChunkSize(plugin.HoudiniInstancePlugin,
AYONPyblishPluginMixin):
"""Collect chunk size for cache submission to Deadline."""
@ -11,7 +12,6 @@ class CollectChunkSize(pyblish.api.InstancePlugin,
families = ["ass", "pointcache",
"vdbcache", "mantraifd",
"redshiftproxy", "model"]
hosts = ["houdini"]
targets = ["local", "remote"]
label = "Collect Chunk Size"
chunk_size = 999999

View file

@ -2,14 +2,14 @@ import os
import hou
import pyblish.api
from ayon_houdini.api import plugin
class CollectHoudiniCurrentFile(pyblish.api.ContextPlugin):
class CollectHoudiniCurrentFile(plugin.HoudiniContextPlugin):
"""Inject the current working file into context"""
order = pyblish.api.CollectorOrder - 0.1
label = "Houdini Current File"
hosts = ["houdini"]
def process(self, context):
"""Inject the current working file"""

View file

@ -1,7 +1,8 @@
import pyblish.api
from ayon_houdini.api import plugin
class CollectFarmInstances(pyblish.api.InstancePlugin):
class CollectFarmInstances(plugin.HoudiniInstancePlugin):
"""Collect instances for farm render."""
order = pyblish.api.CollectorOrder
@ -11,7 +12,6 @@ class CollectFarmInstances(pyblish.api.InstancePlugin):
"arnold_rop",
"vray_rop"]
hosts = ["houdini"]
targets = ["local", "remote"]
label = "Collect farm instances"

View file

@ -5,10 +5,10 @@ import re
import hou # noqa
import pyblish.api
from ayon_core.hosts.houdini.api import lib
from ayon_houdini.api import lib, plugin
class CollectFrames(pyblish.api.InstancePlugin):
class CollectFrames(plugin.HoudiniInstancePlugin):
"""Collect all frames which would be saved from the ROP nodes"""
# This specific order value is used so that

View file

@ -1,8 +1,8 @@
from collections import deque
import pyblish.api
from ayon_core.pipeline import registered_host
from ayon_houdini.api import plugin
def get_container_members(container):
@ -80,7 +80,7 @@ def iter_upstream(node):
collected.update(ancestors)
class CollectUpstreamInputs(pyblish.api.InstancePlugin):
class CollectUpstreamInputs(plugin.HoudiniInstancePlugin):
"""Collect source input containers used for this publish.
This will include `inputs` data of which loaded publishes were used in the
@ -91,7 +91,6 @@ class CollectUpstreamInputs(pyblish.api.InstancePlugin):
label = "Collect Inputs"
order = pyblish.api.CollectorOrder + 0.4
hosts = ["houdini"]
def process(self, instance):
# We can't get the "inputAncestors" directly from the ROP

View file

@ -10,7 +10,6 @@ class CollectPointcacheType(pyblish.api.InstancePlugin):
"""Collect data type for different instances."""
order = pyblish.api.CollectorOrder
hosts = ["houdini"]
families = ["pointcache", "model"]
label = "Collect instances types"

View file

@ -1,11 +1,11 @@
import hou
import pyblish.api
from ayon_core.hosts.houdini.api import lib
import ayon_core.hosts.houdini.api.usd as hou_usdlib
from ayon_core.pipeline import usdlib
from ayon_houdini.api import lib, plugin
import ayon_houdini.api.usd as hou_usdlib
class CollectInstancesUsdLayered(pyblish.api.ContextPlugin):
class CollectInstancesUsdLayered(plugin.HoudiniContextPlugin):
"""Collect Instances from a ROP Network and its configured layer paths.
The output nodes of the ROP node will only be published when *any* of the
@ -32,7 +32,6 @@ class CollectInstancesUsdLayered(pyblish.api.ContextPlugin):
order = pyblish.api.CollectorOrder - 0.01
label = "Collect Instances (USD Configured Layers)"
hosts = ["houdini"]
def process(self, context):

View file

@ -4,16 +4,17 @@ import os
import hou
import pyblish.api
from ayon_core.hosts.houdini.api.lib import (
from ayon_houdini.api.lib import (
evalParmNoFrame,
get_color_management_preferences
)
from ayon_core.hosts.houdini.api import (
colorspace
from ayon_houdini.api import (
colorspace,
plugin
)
class CollectKarmaROPRenderProducts(pyblish.api.InstancePlugin):
class CollectKarmaROPRenderProducts(plugin.HoudiniInstancePlugin):
"""Collect Karma Render Products
Collects the instance.data["files"] for the multipart render product.
@ -27,7 +28,6 @@ class CollectKarmaROPRenderProducts(pyblish.api.InstancePlugin):
# This specific order value is used so that
# this plugin runs after CollectFrames
order = pyblish.api.CollectorOrder + 0.11
hosts = ["houdini"]
families = ["karma_rop"]
def process(self, instance):

View file

@ -6,9 +6,10 @@ from ayon_core.pipeline.publish import (
get_plugin_settings,
apply_plugin_settings_automatically
)
from ayon_houdini.api import plugin
class CollectLocalRenderInstances(pyblish.api.InstancePlugin):
class CollectLocalRenderInstances(plugin.HoudiniInstancePlugin):
"""Collect instances for local render.
Agnostic Local Render Collector.
@ -22,7 +23,6 @@ class CollectLocalRenderInstances(pyblish.api.InstancePlugin):
"arnold_rop",
"vray_rop"]
hosts = ["houdini"]
label = "Collect local render instances"
use_deadline_aov_filter = False

View file

@ -4,16 +4,17 @@ import os
import hou
import pyblish.api
from ayon_core.hosts.houdini.api.lib import (
from ayon_houdini.api.lib import (
evalParmNoFrame,
get_color_management_preferences
)
from ayon_core.hosts.houdini.api import (
colorspace
from ayon_houdini.api import (
colorspace,
plugin
)
class CollectMantraROPRenderProducts(pyblish.api.InstancePlugin):
class CollectMantraROPRenderProducts(plugin.HoudiniInstancePlugin):
"""Collect Mantra Render Products
Collects the instance.data["files"] for the render products.
@ -27,7 +28,6 @@ class CollectMantraROPRenderProducts(pyblish.api.InstancePlugin):
# This specific order value is used so that
# this plugin runs after CollectFrames
order = pyblish.api.CollectorOrder + 0.11
hosts = ["houdini"]
families = ["mantra_rop"]
def process(self, instance):

View file

@ -1,9 +1,9 @@
import pyblish.api
from ayon_core.pipeline.publish import KnownPublishError
from ayon_houdini.api import plugin
class CollectOutputSOPPath(pyblish.api.InstancePlugin):
class CollectOutputSOPPath(plugin.HoudiniInstancePlugin):
"""Collect the out node's SOP/COP Path value."""
order = pyblish.api.CollectorOrder
@ -19,7 +19,6 @@ class CollectOutputSOPPath(pyblish.api.InstancePlugin):
"model"
]
hosts = ["houdini"]
label = "Collect Output Node Path"
def process(self, instance):

View file

@ -4,16 +4,17 @@ import os
import hou
import pyblish.api
from ayon_core.hosts.houdini.api.lib import (
from ayon_houdini.api.lib import (
evalParmNoFrame,
get_color_management_preferences
)
from ayon_core.hosts.houdini.api import (
colorspace
from ayon_houdini.api import (
colorspace,
plugin
)
class CollectRedshiftROPRenderProducts(pyblish.api.InstancePlugin):
class CollectRedshiftROPRenderProducts(plugin.HoudiniInstancePlugin):
"""Collect USD Render Products
Collects the instance.data["files"] for the render products.
@ -27,7 +28,6 @@ class CollectRedshiftROPRenderProducts(pyblish.api.InstancePlugin):
# This specific order value is used so that
# this plugin runs after CollectFrames
order = pyblish.api.CollectorOrder + 0.11
hosts = ["houdini"]
families = ["redshift_rop"]
def process(self, instance):

View file

@ -1,16 +1,15 @@
import hou
import pyblish.api
import hou
from ayon_core.pipeline.publish import RepairAction
from ayon_core.hosts.houdini.api import lib
from ayon_houdini.api import lib, plugin
class CollectRemotePublishSettings(pyblish.api.ContextPlugin):
class CollectRemotePublishSettings(plugin.HoudiniContextPlugin):
"""Collect custom settings of the Remote Publish node."""
order = pyblish.api.CollectorOrder
families = ["*"]
hosts = ["houdini"]
targets = ["deadline"]
label = "Remote Publish Submission Settings"
actions = [RepairAction]

View file

@ -5,6 +5,7 @@ import hou
import pxr.UsdRender
import pyblish.api
from ayon_houdini.api import plugin
def get_var_changed(variable=None):
@ -41,12 +42,11 @@ def get_var_changed(variable=None):
return changed
class CollectRenderProducts(pyblish.api.InstancePlugin):
class CollectRenderProducts(plugin.HoudiniInstancePlugin):
"""Collect USD Render Products."""
label = "Collect Render Products"
order = pyblish.api.CollectorOrder + 0.4
hosts = ["houdini"]
families = ["usdrender"]
def process(self, instance):

View file

@ -1,8 +1,9 @@
import hou
import pyblish.api
from ayon_houdini.api import plugin
class CollectHoudiniReviewData(pyblish.api.InstancePlugin):
class CollectHoudiniReviewData(plugin.HoudiniInstancePlugin):
"""Collect Review Data."""
label = "Collect Review Data"
@ -10,7 +11,6 @@ class CollectHoudiniReviewData(pyblish.api.InstancePlugin):
# this plugin runs after CollectRopFrameRange
# Also after CollectLocalRenderInstances
order = pyblish.api.CollectorOrder + 0.13
hosts = ["houdini"]
families = ["review"]
def process(self, instance):

View file

@ -1,7 +1,8 @@
import pyblish.api
from ayon_houdini.api import plugin
class CollectReviewableInstances(pyblish.api.InstancePlugin):
class CollectReviewableInstances(plugin.HoudiniInstancePlugin):
"""Collect Reviewable Instances.
Basically, all instances of the specified families

View file

@ -2,13 +2,12 @@
"""Collector plugin for frames data on ROP instances."""
import hou # noqa
import pyblish.api
from ayon_core.hosts.houdini.api import lib
from ayon_houdini.api import lib, plugin
class CollectRopFrameRange(pyblish.api.InstancePlugin):
class CollectRopFrameRange(plugin.HoudiniInstancePlugin):
"""Collect all frames which would be saved from the ROP nodes"""
hosts = ["houdini"]
order = pyblish.api.CollectorOrder
label = "Collect RopNode Frame Range"

View file

@ -2,12 +2,12 @@
"""Collector for staticMesh types. """
import pyblish.api
from ayon_houdini.api import plugin
class CollectStaticMeshType(pyblish.api.InstancePlugin):
class CollectStaticMeshType(plugin.HoudiniInstancePlugin):
"""Collect data type for fbx instance."""
hosts = ["houdini"]
families = ["staticMesh"]
label = "Collect type of staticMesh"

View file

@ -1,10 +1,10 @@
import pyblish.api
import ayon_api
from ayon_core.pipeline import usdlib, KnownPublishError
from ayon_houdini.api import plugin
class CollectUsdBootstrap(pyblish.api.InstancePlugin):
class CollectUsdBootstrap(plugin.HoudiniInstancePlugin):
"""Collect special Asset/Shot bootstrap instances if those are needed.
Some specific products are intended to be part of the default structure
@ -21,7 +21,6 @@ class CollectUsdBootstrap(pyblish.api.InstancePlugin):
order = pyblish.api.CollectorOrder + 0.35
label = "Collect USD Bootstrap"
hosts = ["houdini"]
families = ["usd", "usd.layered"]
def process(self, instance):

View file

@ -1,17 +1,15 @@
import os
import pyblish.api
import ayon_core.hosts.houdini.api.usd as usdlib
import hou
import pyblish.api
from ayon_houdini.api import plugin
import ayon_houdini.api.usd as usdlib
class CollectUsdLayers(pyblish.api.InstancePlugin):
class CollectUsdLayers(plugin.HoudiniInstancePlugin):
"""Collect the USD Layers that have configured save paths."""
order = pyblish.api.CollectorOrder + 0.35
label = "Collect USD Layers"
hosts = ["houdini"]
families = ["usd"]
def process(self, instance):

View file

@ -4,16 +4,17 @@ import os
import hou
import pyblish.api
from ayon_core.hosts.houdini.api.lib import (
from ayon_houdini.api.lib import (
evalParmNoFrame,
get_color_management_preferences
)
from ayon_core.hosts.houdini.api import (
colorspace
from ayon_houdini.api import (
colorspace,
plugin
)
class CollectVrayROPRenderProducts(pyblish.api.InstancePlugin):
class CollectVrayROPRenderProducts(plugin.HoudiniInstancePlugin):
"""Collect Vray Render Products
Collects the instance.data["files"] for the render products.
@ -27,7 +28,6 @@ class CollectVrayROPRenderProducts(pyblish.api.InstancePlugin):
# This specific order value is used so that
# this plugin runs after CollectFrames
order = pyblish.api.CollectorOrder + 0.11
hosts = ["houdini"]
families = ["vray_rop"]
def process(self, instance):

View file

@ -1,14 +1,13 @@
import os
import pyblish.api
from ayon_houdini.api import plugin
class CollectWorkfile(pyblish.api.InstancePlugin):
class CollectWorkfile(plugin.HoudiniInstancePlugin):
"""Inject workfile representation into instance"""
order = pyblish.api.CollectorOrder - 0.01
label = "Houdini Workfile Data"
hosts = ["houdini"]
families = ["workfile"]
def process(self, instance):

View file

@ -1,13 +1,13 @@
import pyblish.api
import hou
import pyblish.api
from ayon_houdini.api import plugin
class CollectWorksceneFPS(pyblish.api.ContextPlugin):
class CollectWorksceneFPS(plugin.HoudiniContextPlugin):
"""Get the FPS of the work scene."""
label = "Workscene FPS"
order = pyblish.api.CollectorOrder
hosts = ["houdini"]
def process(self, context):
fps = hou.fps()

View file

@ -1,11 +1,10 @@
import pyblish.api
import tempfile
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api import lib
from ayon_core.hosts.houdini.api.pipeline import IS_HEADLESS
import pyblish.api
from ayon_houdini.api import lib, plugin
from ayon_houdini.api.pipeline import IS_HEADLESS
class ExtractActiveViewThumbnail(publish.Extractor):
class ExtractActiveViewThumbnail(plugin.HoudiniExtractorPlugin):
"""Set instance thumbnail to a screengrab of current active viewport.
This makes it so that if an instance does not have a thumbnail set yet that
@ -16,7 +15,6 @@ class ExtractActiveViewThumbnail(publish.Extractor):
order = pyblish.api.ExtractorOrder + 0.49
label = "Extract Active View Thumbnail"
families = ["workfile"]
hosts = ["houdini"]
def process(self, instance):
if IS_HEADLESS:

View file

@ -1,18 +1,16 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop
import hou
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import render_rop
class ExtractAlembic(publish.Extractor):
class ExtractAlembic(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder
label = "Extract Alembic"
hosts = ["houdini"]
families = ["abc", "camera"]
targets = ["local", "remote"]

View file

@ -1,19 +1,17 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop
import hou
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import render_rop
class ExtractAss(publish.Extractor):
class ExtractAss(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder + 0.1
label = "Extract Ass"
families = ["ass"]
hosts = ["houdini"]
targets = ["local", "remote"]
def process(self, instance):

View file

@ -1,19 +1,15 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop
from ayon_core.hosts.houdini.api import lib
import hou
from ayon_houdini.api import lib, plugin
class ExtractBGEO(publish.Extractor):
class ExtractBGEO(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder
label = "Extract BGEO"
hosts = ["houdini"]
families = ["bgeo"]
def process(self, instance):
@ -32,7 +28,7 @@ class ExtractBGEO(publish.Extractor):
file_name, staging_dir))
# write files
render_rop(ropnode)
lib.render_rop(ropnode)
output = instance.data["frames"]

View file

@ -1,18 +1,17 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop, splitext
import hou
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import render_rop, splitext
class ExtractComposite(publish.Extractor,
class ExtractComposite(plugin.HoudiniExtractorPlugin,
publish.ColormanagedPyblishPluginMixin):
order = pyblish.api.ExtractorOrder
label = "Extract Composite (Image Sequence)"
hosts = ["houdini"]
families = ["imagesequence"]
def process(self, instance):

View file

@ -2,18 +2,16 @@
"""Fbx Extractor for houdini. """
import os
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop
import hou
import pyblish.api
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import render_rop
class ExtractFBX(publish.Extractor):
class ExtractFBX(plugin.HoudiniExtractorPlugin):
label = "Extract FBX"
families = ["fbx"]
hosts = ["houdini"]
order = pyblish.api.ExtractorOrder + 0.1

View file

@ -1,16 +1,15 @@
# -*- coding: utf-8 -*-
import os
from pprint import pformat
import pyblish.api
from ayon_core.pipeline import publish
import hou
import pyblish.api
from ayon_houdini.api import plugin
class ExtractHDA(publish.Extractor):
class ExtractHDA(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder
label = "Extract HDA"
hosts = ["houdini"]
families = ["hda"]
def process(self, instance):

View file

@ -1,17 +1,15 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
import hou
from ayon_houdini.api import plugin
class ExtractMantraIFD(publish.Extractor):
class ExtractMantraIFD(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder
label = "Extract Mantra ifd"
hosts = ["houdini"]
families = ["mantraifd"]
targets = ["local", "remote"]

View file

@ -1,20 +1,19 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop
import hou
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import render_rop
class ExtractOpenGL(publish.Extractor,
class ExtractOpenGL(plugin.HoudiniExtractorPlugin,
publish.ColormanagedPyblishPluginMixin):
order = pyblish.api.ExtractorOrder - 0.01
label = "Extract OpenGL"
families = ["review"]
hosts = ["houdini"]
def process(self, instance):
ropnode = hou.node(instance.data.get("instance_node"))

View file

@ -1,19 +1,17 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop
import hou
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import render_rop
class ExtractRedshiftProxy(publish.Extractor):
class ExtractRedshiftProxy(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder + 0.1
label = "Extract Redshift Proxy"
families = ["redshiftproxy"]
hosts = ["houdini"]
targets = ["local", "remote"]
def process(self, instance):

View file

@ -1,16 +1,16 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop
import hou
import os
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import render_rop
class ExtractRender(publish.Extractor):
class ExtractRender(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder
label = "Extract Render"
hosts = ["houdini"]
families = ["mantra_rop",
"karma_rop",
"redshift_rop",

View file

@ -1,17 +1,16 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import render_rop
import hou
class ExtractUSD(publish.Extractor):
class ExtractUSD(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder
label = "Extract USD"
hosts = ["houdini"]
families = ["usd",
"usdModel",
"usdSetDress"]

View file

@ -7,12 +7,10 @@ import hou
import ayon_api
import pyblish.api
from ayon_core.pipeline import (
get_representation_path,
publish,
)
import ayon_core.hosts.houdini.api.usd as hou_usdlib
from ayon_core.hosts.houdini.api.lib import render_rop
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import plugin
import ayon_houdini.api.usd as hou_usdlib
from ayon_houdini.api.lib import render_rop
class ExitStack(object):
@ -154,11 +152,10 @@ def parm_values(overrides):
parm.set(value)
class ExtractUSDLayered(publish.Extractor):
class ExtractUSDLayered(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder
label = "Extract Layered USD"
hosts = ["houdini"]
families = ["usdLayered", "usdShade"]
# Force Output Processors so it will always save any file
@ -312,3 +309,14 @@ class ExtractUSDLayered(publish.Extractor):
return False
return filecmp.cmp(old_file, new_file)
def staging_dir(self, instance):
"""Provide a temporary directory in which to store extracted files
Upon calling this method the staging directory is stored inside
the instance.data['stagingDir']
"""
from ayon_core.pipeline.publish import get_instance_staging_dir
return get_instance_staging_dir(instance)

View file

@ -1,19 +1,17 @@
import os
import hou
import pyblish.api
from ayon_core.pipeline import publish
from ayon_core.hosts.houdini.api.lib import render_rop
import hou
from ayon_houdini.api import plugin
from ayon_houdini.api.lib import render_rop
class ExtractVDBCache(publish.Extractor):
class ExtractVDBCache(plugin.HoudiniExtractorPlugin):
order = pyblish.api.ExtractorOrder + 0.1
label = "Extract VDB Cache"
families = ["vdbcache"]
hosts = ["houdini"]
def process(self, instance):
if instance.data.get("farm"):

View file

@ -25,4 +25,4 @@ ROP node `{rop_path}` is set to export SOP path `{sop_path}`.
</detail>
</error>
</root>
</root>

View file

@ -2,11 +2,15 @@ import pyblish.api
from ayon_core.lib import version_up
from ayon_core.pipeline import registered_host
from ayon_core.pipeline.publish import get_errored_plugins_from_context
from ayon_core.pipeline.publish import KnownPublishError
from ayon_core.pipeline.publish import (
get_errored_plugins_from_context,
KnownPublishError
)
from ayon_houdini.api import plugin
class IncrementCurrentFile(pyblish.api.ContextPlugin):
class IncrementCurrentFile(plugin.HoudiniContextPlugin):
"""Increment the current file.
Saves the current scene with an increased version number.
@ -15,7 +19,6 @@ class IncrementCurrentFile(pyblish.api.ContextPlugin):
label = "Increment current file"
order = pyblish.api.IntegratorOrder + 9.0
hosts = ["houdini"]
families = ["workfile",
"usdrender",
"mantra_rop",

View file

@ -2,13 +2,14 @@ import pyblish.api
from ayon_core.pipeline import registered_host
from ayon_houdini.api import plugin
class SaveCurrentScene(pyblish.api.ContextPlugin):
class SaveCurrentScene(plugin.HoudiniContextPlugin):
"""Save current scene"""
label = "Save current file"
order = pyblish.api.ExtractorOrder - 0.49
hosts = ["houdini"]
def process(self, context):

View file

@ -1,11 +1,13 @@
# -*- coding: utf-8 -*-
import pyblish.api
from collections import defaultdict
import pyblish.api
from ayon_core.pipeline import PublishValidationError
from ayon_houdini.api import plugin
class ValidateAbcPrimitiveToDetail(pyblish.api.InstancePlugin):
class ValidateAbcPrimitiveToDetail(plugin.HoudiniInstancePlugin):
"""Validate Alembic ROP Primitive to Detail attribute is consistent.
The Alembic ROP crashes Houdini whenever an attribute in the "Primitive to
@ -18,7 +20,6 @@ class ValidateAbcPrimitiveToDetail(pyblish.api.InstancePlugin):
order = pyblish.api.ValidatorOrder + 0.1
families = ["abc"]
hosts = ["houdini"]
label = "Validate Primitive to Detail (Abc)"
def process(self, instance):

View file

@ -1,8 +1,10 @@
# -*- coding: utf-8 -*-
import pyblish.api
import hou
import pyblish.api
from ayon_houdini.api import plugin
class ValidateAlembicROPFaceSets(pyblish.api.InstancePlugin):
class ValidateAlembicROPFaceSets(plugin.HoudiniInstancePlugin):
"""Validate Face Sets are disabled for extraction to pointcache.
When groups are saved as Face Sets with the Alembic these show up
@ -19,7 +21,6 @@ class ValidateAlembicROPFaceSets(pyblish.api.InstancePlugin):
order = pyblish.api.ValidatorOrder + 0.1
families = ["abc"]
hosts = ["houdini"]
label = "Validate Alembic ROP Face Sets"
def process(self, instance):

View file

@ -1,10 +1,12 @@
# -*- coding: utf-8 -*-
import hou
import pyblish.api
from ayon_core.pipeline import PublishValidationError
import hou
from ayon_houdini.api import plugin
class ValidateAlembicInputNode(pyblish.api.InstancePlugin):
class ValidateAlembicInputNode(plugin.HoudiniInstancePlugin):
"""Validate that the node connected to the output is correct.
The connected node cannot be of the following types for Alembic:
@ -15,7 +17,6 @@ class ValidateAlembicInputNode(pyblish.api.InstancePlugin):
order = pyblish.api.ValidatorOrder + 0.1
families = ["abc"]
hosts = ["houdini"]
label = "Validate Input Node (Abc)"
def process(self, instance):

View file

@ -1,11 +1,12 @@
import pyblish.api
from ayon_core.pipeline.publish import PublishValidationError
from ayon_core.hosts.houdini.api import lib
import hou
import pyblish.api
from ayon_core.pipeline.publish import PublishValidationError
class ValidateAnimationSettings(pyblish.api.InstancePlugin):
from ayon_houdini.api import lib, plugin
class ValidateAnimationSettings(plugin.HoudiniInstancePlugin):
"""Validate if the unexpanded string contains the frame ('$F') token
This validator will only check the output parameter of the node if

Some files were not shown because too many files have changed in this diff Show more