mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
Merge branch 'feature/909-define-basic-trait-type-using-dataclasses' into feature/911-new-traits-based-integrator
This commit is contained in:
commit
71ca34be9a
68 changed files with 4131 additions and 453 deletions
14
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
14
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
|
@ -35,6 +35,20 @@ body:
|
|||
label: Version
|
||||
description: What version are you running? Look to AYON Tray
|
||||
options:
|
||||
- 1.0.14
|
||||
- 1.0.13
|
||||
- 1.0.12
|
||||
- 1.0.11
|
||||
- 1.0.10
|
||||
- 1.0.9
|
||||
- 1.0.8
|
||||
- 1.0.7
|
||||
- 1.0.6
|
||||
- 1.0.5
|
||||
- 1.0.4
|
||||
- 1.0.3
|
||||
- 1.0.2
|
||||
- 1.0.1
|
||||
- 1.0.0
|
||||
- 0.4.4
|
||||
- 0.4.3
|
||||
|
|
|
|||
|
|
@ -1,44 +1,38 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Addons for AYON."""
|
||||
from . import click_wrap
|
||||
from .interfaces import (
|
||||
IPluginPaths,
|
||||
ITrayAddon,
|
||||
ITrayAction,
|
||||
ITrayService,
|
||||
IHostAddon,
|
||||
ITraits,
|
||||
)
|
||||
|
||||
from .base import (
|
||||
ProcessPreparationError,
|
||||
ProcessContext,
|
||||
AYONAddon,
|
||||
AddonsManager,
|
||||
AYONAddon,
|
||||
ProcessContext,
|
||||
ProcessPreparationError,
|
||||
load_addons,
|
||||
)
|
||||
|
||||
from .interfaces import (
|
||||
IHostAddon,
|
||||
IPluginPaths,
|
||||
ITraits,
|
||||
ITrayAction,
|
||||
ITrayAddon,
|
||||
ITrayService,
|
||||
)
|
||||
from .utils import (
|
||||
ensure_addons_are_process_context_ready,
|
||||
ensure_addons_are_process_ready,
|
||||
)
|
||||
|
||||
|
||||
__all__ = (
|
||||
"click_wrap",
|
||||
|
||||
"IPluginPaths",
|
||||
"ITrayAddon",
|
||||
"ITrayAction",
|
||||
"ITrayService",
|
||||
"IHostAddon",
|
||||
"ITraits",
|
||||
|
||||
"ProcessPreparationError",
|
||||
"ProcessContext",
|
||||
"AYONAddon",
|
||||
"AddonsManager",
|
||||
"load_addons",
|
||||
|
||||
"IHostAddon",
|
||||
"IPluginPaths",
|
||||
"ITraits",
|
||||
"ITrayAction",
|
||||
"ITrayAddon",
|
||||
"ITrayService",
|
||||
"ProcessContext",
|
||||
"ProcessPreparationError",
|
||||
"click_wrap",
|
||||
"ensure_addons_are_process_context_ready",
|
||||
"ensure_addons_are_process_ready",
|
||||
"load_addons",
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
"""Interfaces for AYON addons."""
|
||||
"""Addon interfaces for AYON."""
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from abc import ABCMeta, abstractmethod
|
||||
from typing import TYPE_CHECKING, Callable, Optional, Type
|
||||
|
||||
|
|
@ -10,8 +9,9 @@ from ayon_core import resources
|
|||
if TYPE_CHECKING:
|
||||
from qtpy import QtWidgets
|
||||
|
||||
from ayon_core.addon import AddonsManager
|
||||
from ayon_core.addon.base import AddonsManager
|
||||
from ayon_core.pipeline.traits import TraitBase
|
||||
from ayon_core.tools.tray.ui.tray import TrayManager
|
||||
|
||||
|
||||
class _AYONInterfaceMeta(ABCMeta):
|
||||
|
|
@ -37,10 +37,6 @@ class AYONInterface(metaclass=_AYONInterfaceMeta):
|
|||
|
||||
log = None
|
||||
|
||||
def __init__(self):
|
||||
"""Initialize interface."""
|
||||
self.log = logging.getLogger(self.__class__.__name__)
|
||||
|
||||
|
||||
class IPluginPaths(AYONInterface):
|
||||
"""Addon has plugin paths to return.
|
||||
|
|
@ -162,7 +158,7 @@ class ITrayAddon(AYONInterface):
|
|||
"""
|
||||
manager: AddonsManager
|
||||
tray_initialized = False
|
||||
_tray_manager = None
|
||||
_tray_manager: TrayManager = None
|
||||
_admin_submenu = None
|
||||
|
||||
@abstractmethod
|
||||
|
|
@ -175,18 +171,14 @@ class ITrayAddon(AYONInterface):
|
|||
prepared
|
||||
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def tray_menu(self, tray_menu: QtWidgets.QMenu) -> None:
|
||||
"""Add addon's action to tray menu."""
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
@abstractmethod
|
||||
def tray_start(self) -> None:
|
||||
"""Start procedure in tray tool."""
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def tray_exit(self) -> None:
|
||||
|
|
@ -195,7 +187,6 @@ class ITrayAddon(AYONInterface):
|
|||
This is place where all threads should be shut.
|
||||
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def execute_in_main_thread(self, callback: Callable) -> None:
|
||||
"""Pushes callback to the queue or process 'callback' on a main thread.
|
||||
|
|
@ -208,6 +199,8 @@ class ITrayAddon(AYONInterface):
|
|||
|
||||
"""
|
||||
if not self.tray_initialized:
|
||||
# TODO (Illicit): Called without initialized tray, still
|
||||
# main thread needed.
|
||||
try:
|
||||
callback()
|
||||
|
||||
|
|
@ -286,12 +279,10 @@ class ITrayAction(ITrayAddon):
|
|||
@abstractmethod
|
||||
def label(self) -> str:
|
||||
"""Service label showed in menu."""
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def on_action_trigger(self) -> None:
|
||||
"""What happens on actions click."""
|
||||
raise NotImplementedError
|
||||
|
||||
def tray_menu(self, tray_menu: QtWidgets.QMenu) -> None:
|
||||
"""Add action to tray menu."""
|
||||
|
|
@ -330,7 +321,11 @@ class ITrayService(ITrayAddon):
|
|||
@abstractmethod
|
||||
def label(self) -> str:
|
||||
"""Service label showed in menu."""
|
||||
raise NotImplementedError
|
||||
|
||||
# TODO (Illicit): be able to get any sort of information to show/print
|
||||
# @abstractmethod
|
||||
# def get_service_info(self):
|
||||
# pass
|
||||
|
||||
@staticmethod
|
||||
def services_submenu(tray_menu: QtWidgets.QMenu) -> QtWidgets.QMenu:
|
||||
|
|
@ -423,7 +418,6 @@ class IHostAddon(AYONInterface):
|
|||
@abstractmethod
|
||||
def host_name(self) -> str:
|
||||
"""Name of host which addon represents."""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_workfile_extensions(self) -> list[str]:
|
||||
"""Define workfile extensions for host.
|
||||
|
|
@ -448,4 +442,3 @@ class ITraits(AYONInterface):
|
|||
list[Type[TraitBase]]: Traits for the addon.
|
||||
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
|
|
|||
|
|
@ -26,10 +26,12 @@ class AddLastWorkfileToLaunchArgs(PreLaunchHook):
|
|||
"photoshop",
|
||||
"tvpaint",
|
||||
"substancepainter",
|
||||
"substancedesigner",
|
||||
"aftereffects",
|
||||
"wrap",
|
||||
"openrv",
|
||||
"cinema4d"
|
||||
"cinema4d",
|
||||
"silhouette",
|
||||
}
|
||||
launch_types = {LaunchTypes.local}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ class OCIOEnvHook(PreLaunchHook):
|
|||
order = 0
|
||||
hosts = {
|
||||
"substancepainter",
|
||||
"substancedesigner",
|
||||
"fusion",
|
||||
"blender",
|
||||
"aftereffects",
|
||||
|
|
@ -20,7 +21,8 @@ class OCIOEnvHook(PreLaunchHook):
|
|||
"hiero",
|
||||
"resolve",
|
||||
"openrv",
|
||||
"cinema4d"
|
||||
"cinema4d",
|
||||
"silhouette",
|
||||
}
|
||||
launch_types = set()
|
||||
|
||||
|
|
|
|||
|
|
@ -108,21 +108,29 @@ def run_subprocess(*args, **kwargs):
|
|||
| getattr(subprocess, "CREATE_NO_WINDOW", 0)
|
||||
)
|
||||
|
||||
# Escape parentheses for bash
|
||||
# Escape special characters in certain shells
|
||||
if (
|
||||
kwargs.get("shell") is True
|
||||
and len(args) == 1
|
||||
and isinstance(args[0], str)
|
||||
and os.getenv("SHELL") in ("/bin/bash", "/bin/sh")
|
||||
):
|
||||
# Escape parentheses for bash
|
||||
if os.getenv("SHELL") in ("/bin/bash", "/bin/sh"):
|
||||
new_arg = (
|
||||
args[0]
|
||||
.replace("(", "\\(")
|
||||
.replace(")", "\\)")
|
||||
)
|
||||
args = (new_arg,)
|
||||
# Escape & on Windows in shell with `cmd.exe` using ^&
|
||||
elif (
|
||||
platform.system().lower() == "windows"
|
||||
and os.getenv("COMSPEC").endswith("cmd.exe")
|
||||
):
|
||||
new_arg = args[0].replace("&", "^&")
|
||||
args = (new_arg, )
|
||||
|
||||
# Get environents from kwarg or use current process environments if were
|
||||
# Get environments from kwarg or use current process environments if were
|
||||
# not passed.
|
||||
env = kwargs.get("env") or os.environ
|
||||
# Make sure environment contains only strings
|
||||
|
|
|
|||
|
|
@ -587,8 +587,8 @@ class FormattingPart:
|
|||
if sub_key < 0:
|
||||
sub_key = len(value) + sub_key
|
||||
|
||||
invalid = 0 > sub_key < len(data)
|
||||
if invalid:
|
||||
valid = 0 <= sub_key < len(value)
|
||||
if not valid:
|
||||
used_keys.append(sub_key)
|
||||
missing_key = True
|
||||
break
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ from ayon_core.lib.events import QueuedEventSystem
|
|||
from ayon_core.lib.attribute_definitions import get_default_values
|
||||
from ayon_core.host import IPublishHost, IWorkfileHost
|
||||
from ayon_core.pipeline import Anatomy
|
||||
from ayon_core.pipeline.template_data import get_template_data
|
||||
from ayon_core.pipeline.plugin_discover import DiscoverResult
|
||||
|
||||
from .exceptions import (
|
||||
|
|
@ -480,6 +481,36 @@ class CreateContext:
|
|||
self.get_current_project_name())
|
||||
return self._current_project_settings
|
||||
|
||||
def get_template_data(
|
||||
self, folder_path: Optional[str], task_name: Optional[str]
|
||||
) -> Dict[str, Any]:
|
||||
"""Prepare template data for given context.
|
||||
|
||||
Method is using cached entities and settings to prepare template data.
|
||||
|
||||
Args:
|
||||
folder_path (Optional[str]): Folder path.
|
||||
task_name (Optional[str]): Task name.
|
||||
|
||||
Returns:
|
||||
dict[str, Any]: Template data.
|
||||
|
||||
"""
|
||||
project_entity = self.get_current_project_entity()
|
||||
folder_entity = task_entity = None
|
||||
if folder_path:
|
||||
folder_entity = self.get_folder_entity(folder_path)
|
||||
if task_name and folder_entity:
|
||||
task_entity = self.get_task_entity(folder_path, task_name)
|
||||
|
||||
return get_template_data(
|
||||
project_entity,
|
||||
folder_entity,
|
||||
task_entity,
|
||||
host_name=self.host_name,
|
||||
settings=self.get_current_project_settings(),
|
||||
)
|
||||
|
||||
@property
|
||||
def context_has_changed(self):
|
||||
"""Host context has changed.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ from ayon_core.pipeline.plugin_discover import (
|
|||
deregister_plugin,
|
||||
deregister_plugin_path
|
||||
)
|
||||
from ayon_core.pipeline import get_staging_dir_info
|
||||
from ayon_core.pipeline.staging_dir import get_staging_dir_info, StagingDir
|
||||
|
||||
from .constants import DEFAULT_VARIANT_VALUE
|
||||
from .product_name import get_product_name
|
||||
|
|
@ -562,6 +562,10 @@ class BaseCreator(ABC):
|
|||
instance
|
||||
)
|
||||
|
||||
cur_project_name = self.create_context.get_current_project_name()
|
||||
if not project_entity and project_name == cur_project_name:
|
||||
project_entity = self.create_context.get_current_project_entity()
|
||||
|
||||
return get_product_name(
|
||||
project_name,
|
||||
task_name,
|
||||
|
|
@ -833,7 +837,7 @@ class Creator(BaseCreator):
|
|||
"""
|
||||
return self.pre_create_attr_defs
|
||||
|
||||
def get_staging_dir(self, instance):
|
||||
def get_staging_dir(self, instance) -> Optional[StagingDir]:
|
||||
"""Return the staging dir and persistence from instance.
|
||||
|
||||
Args:
|
||||
|
|
@ -858,18 +862,30 @@ class Creator(BaseCreator):
|
|||
["CollectAnatomyInstanceData"]
|
||||
["follow_workfile_version"]
|
||||
)
|
||||
follow_version_hosts = (
|
||||
publish_settings
|
||||
["CollectSceneVersion"]
|
||||
["hosts"]
|
||||
)
|
||||
|
||||
current_host = create_ctx.host.name
|
||||
follow_workfile_version = (
|
||||
follow_workfile_version and
|
||||
current_host in follow_version_hosts
|
||||
)
|
||||
|
||||
# Gather version number provided from the instance.
|
||||
current_workfile = create_ctx.get_current_workfile_path()
|
||||
version = instance.get("version")
|
||||
|
||||
# If follow workfile, gather version from workfile path.
|
||||
if version is None and follow_workfile_version:
|
||||
current_workfile = self.create_context.get_current_workfile_path()
|
||||
if version is None and follow_workfile_version and current_workfile:
|
||||
workfile_version = get_version_from_path(current_workfile)
|
||||
if workfile_version is not None:
|
||||
version = int(workfile_version)
|
||||
|
||||
# Fill-up version with next version available.
|
||||
elif version is None:
|
||||
if version is None:
|
||||
versions = self.get_next_versions_for_instances(
|
||||
[instance]
|
||||
)
|
||||
|
|
@ -915,7 +931,8 @@ class Creator(BaseCreator):
|
|||
|
||||
instance.transient_data.update({
|
||||
"stagingDir": staging_dir_path,
|
||||
"stagingDir_persistent": staging_dir_info.persistent,
|
||||
"stagingDir_persistent": staging_dir_info.is_persistent,
|
||||
"stagingDir_is_custom": staging_dir_info.is_custom,
|
||||
})
|
||||
|
||||
self.log.info(f"Applied staging dir to instance: {staging_dir_path}")
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import os
|
|||
import logging
|
||||
import collections
|
||||
|
||||
from ayon_core.pipeline.constants import AVALON_INSTANCE_ID
|
||||
from ayon_core.pipeline.constants import AYON_INSTANCE_ID
|
||||
|
||||
from .product_name import get_product_name
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ class LegacyCreator:
|
|||
# Default data
|
||||
self.data = collections.OrderedDict()
|
||||
# TODO use 'AYON_INSTANCE_ID' when all hosts support it
|
||||
self.data["id"] = AVALON_INSTANCE_ID
|
||||
self.data["id"] = AYON_INSTANCE_ID
|
||||
self.data["productType"] = self.product_type
|
||||
self.data["folderPath"] = folder_path
|
||||
self.data["productName"] = name
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import copy
|
||||
import collections
|
||||
from uuid import uuid4
|
||||
import typing
|
||||
from typing import Optional, Dict, List, Any
|
||||
|
||||
from ayon_core.lib.attribute_definitions import (
|
||||
|
|
@ -17,6 +18,9 @@ from ayon_core.pipeline import (
|
|||
from .exceptions import ImmutableKeyError
|
||||
from .changes import TrackChangesItem
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from .creator_plugins import BaseCreator
|
||||
|
||||
|
||||
class ConvertorItem:
|
||||
"""Item representing convertor plugin.
|
||||
|
|
@ -444,10 +448,11 @@ class CreatedInstance:
|
|||
|
||||
def __init__(
|
||||
self,
|
||||
product_type,
|
||||
product_name,
|
||||
data,
|
||||
creator,
|
||||
product_type: str,
|
||||
product_name: str,
|
||||
data: Dict[str, Any],
|
||||
creator: "BaseCreator",
|
||||
transient_data: Optional[Dict[str, Any]] = None,
|
||||
):
|
||||
self._creator = creator
|
||||
creator_identifier = creator.identifier
|
||||
|
|
@ -462,7 +467,9 @@ class CreatedInstance:
|
|||
self._members = []
|
||||
|
||||
# Data that can be used for lifetime of object
|
||||
self._transient_data = {}
|
||||
if transient_data is None:
|
||||
transient_data = {}
|
||||
self._transient_data = transient_data
|
||||
|
||||
# Create a copy of passed data to avoid changing them on the fly
|
||||
data = copy.deepcopy(data or {})
|
||||
|
|
@ -492,7 +499,7 @@ class CreatedInstance:
|
|||
item_id = data.get("id")
|
||||
# TODO use only 'AYON_INSTANCE_ID' when all hosts support it
|
||||
if item_id not in {AYON_INSTANCE_ID, AVALON_INSTANCE_ID}:
|
||||
item_id = AVALON_INSTANCE_ID
|
||||
item_id = AYON_INSTANCE_ID
|
||||
self._data["id"] = item_id
|
||||
self._data["productType"] = product_type
|
||||
self._data["productName"] = product_name
|
||||
|
|
@ -787,16 +794,26 @@ class CreatedInstance:
|
|||
self._create_context.instance_create_attr_defs_changed(self.id)
|
||||
|
||||
@classmethod
|
||||
def from_existing(cls, instance_data, creator):
|
||||
def from_existing(
|
||||
cls,
|
||||
instance_data: Dict[str, Any],
|
||||
creator: "BaseCreator",
|
||||
transient_data: Optional[Dict[str, Any]] = None,
|
||||
) -> "CreatedInstance":
|
||||
"""Convert instance data from workfile to CreatedInstance.
|
||||
|
||||
Args:
|
||||
instance_data (Dict[str, Any]): Data in a structure ready for
|
||||
'CreatedInstance' object.
|
||||
creator (BaseCreator): Creator plugin which is creating the
|
||||
instance of for which the instance belong.
|
||||
"""
|
||||
instance of for which the instance belongs.
|
||||
transient_data (Optional[dict[str, Any]]): Instance transient
|
||||
data.
|
||||
|
||||
Returns:
|
||||
CreatedInstance: Instance object.
|
||||
|
||||
"""
|
||||
instance_data = copy.deepcopy(instance_data)
|
||||
|
||||
product_type = instance_data.get("productType")
|
||||
|
|
@ -809,7 +826,11 @@ class CreatedInstance:
|
|||
product_name = instance_data.get("subset")
|
||||
|
||||
return cls(
|
||||
product_type, product_name, instance_data, creator
|
||||
product_type,
|
||||
product_name,
|
||||
instance_data,
|
||||
creator,
|
||||
transient_data=transient_data,
|
||||
)
|
||||
|
||||
def attribute_value_changed(self, key, changes):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import os
|
||||
import re
|
||||
import clique
|
||||
import math
|
||||
|
||||
import opentimelineio as otio
|
||||
from opentimelineio import opentime as _ot
|
||||
|
|
@ -196,11 +197,11 @@ def is_clip_from_media_sequence(otio_clip):
|
|||
return is_input_sequence or is_input_sequence_legacy
|
||||
|
||||
|
||||
def remap_range_on_file_sequence(otio_clip, in_out_range):
|
||||
def remap_range_on_file_sequence(otio_clip, otio_range):
|
||||
"""
|
||||
Args:
|
||||
otio_clip (otio.schema.Clip): The OTIO clip to check.
|
||||
in_out_range (tuple[float, float]): The in-out range to remap.
|
||||
otio_range (otio.schema.TimeRange): The trim range to apply.
|
||||
|
||||
Returns:
|
||||
tuple(int, int): The remapped range as discrete frame number.
|
||||
|
|
@ -211,17 +212,24 @@ def remap_range_on_file_sequence(otio_clip, in_out_range):
|
|||
if not is_clip_from_media_sequence(otio_clip):
|
||||
raise ValueError(f"Cannot map on non-file sequence clip {otio_clip}.")
|
||||
|
||||
try:
|
||||
media_in_trimmed, media_out_trimmed = in_out_range
|
||||
|
||||
except ValueError as error:
|
||||
raise ValueError("Invalid in_out_range provided.") from error
|
||||
|
||||
media_ref = otio_clip.media_reference
|
||||
available_range = otio_clip.available_range()
|
||||
source_range = otio_clip.source_range
|
||||
available_range_rate = available_range.start_time.rate
|
||||
media_in = available_range.start_time.value
|
||||
|
||||
# Backward-compatibility for Hiero OTIO exporter.
|
||||
# NTSC compatibility might introduce floating rates, when these are
|
||||
# not exactly the same (23.976 vs 23.976024627685547)
|
||||
# this will cause precision issue in computation.
|
||||
# Currently round to 2 decimals for comparison,
|
||||
# but this should always rescale after that.
|
||||
rounded_av_rate = round(available_range_rate, 2)
|
||||
rounded_range_rate = round(otio_range.start_time.rate, 2)
|
||||
|
||||
if rounded_av_rate != rounded_range_rate:
|
||||
raise ValueError("Inconsistent range between clip and provided clip")
|
||||
|
||||
source_range = otio_clip.source_range
|
||||
media_in = available_range.start_time
|
||||
available_range_start_frame = (
|
||||
available_range.start_time.to_frames()
|
||||
)
|
||||
|
|
@ -231,19 +239,32 @@ def remap_range_on_file_sequence(otio_clip, in_out_range):
|
|||
# source range for image sequence. Following code maintain
|
||||
# backward-compatibility by adjusting media_in
|
||||
# while we are updating those.
|
||||
conformed_src_in = source_range.start_time.rescaled_to(
|
||||
available_range_rate
|
||||
)
|
||||
if (
|
||||
is_clip_from_media_sequence(otio_clip)
|
||||
and available_range_start_frame == media_ref.start_frame
|
||||
and source_range.start_time.to_frames() < media_ref.start_frame
|
||||
and conformed_src_in.to_frames() < media_ref.start_frame
|
||||
):
|
||||
media_in = 0
|
||||
media_in = otio.opentime.RationalTime(
|
||||
0, rate=available_range_rate
|
||||
)
|
||||
|
||||
src_offset_in = otio_range.start_time - media_in
|
||||
frame_in = otio.opentime.RationalTime.from_frames(
|
||||
media_in_trimmed - media_in + media_ref.start_frame,
|
||||
media_ref.start_frame + src_offset_in.to_frames(),
|
||||
rate=available_range_rate,
|
||||
).to_frames()
|
||||
|
||||
# e.g.:
|
||||
# duration = 10 frames at 24fps
|
||||
# if frame_in = 1001 then
|
||||
# frame_out = 1010
|
||||
offset_duration = max(0, otio_range.duration.to_frames() - 1)
|
||||
|
||||
frame_out = otio.opentime.RationalTime.from_frames(
|
||||
media_out_trimmed - media_in + media_ref.start_frame,
|
||||
frame_in + offset_duration,
|
||||
rate=available_range_rate,
|
||||
).to_frames()
|
||||
|
||||
|
|
@ -261,21 +282,6 @@ def get_media_range_with_retimes(otio_clip, handle_start, handle_end):
|
|||
media_ref = otio_clip.media_reference
|
||||
is_input_sequence = is_clip_from_media_sequence(otio_clip)
|
||||
|
||||
# Temporary.
|
||||
# Some AYON custom OTIO exporter were implemented with relative
|
||||
# source range for image sequence. Following code maintain
|
||||
# backward-compatibility by adjusting available range
|
||||
# while we are updating those.
|
||||
if (
|
||||
is_input_sequence
|
||||
and available_range.start_time.to_frames() == media_ref.start_frame
|
||||
and source_range.start_time.to_frames() < media_ref.start_frame
|
||||
):
|
||||
available_range = _ot.TimeRange(
|
||||
_ot.RationalTime(0, rate=available_range_rate),
|
||||
available_range.duration,
|
||||
)
|
||||
|
||||
# Conform source range bounds to available range rate
|
||||
# .e.g. embedded TC of (3600 sec/ 1h), duration 100 frames
|
||||
#
|
||||
|
|
@ -320,10 +326,24 @@ def get_media_range_with_retimes(otio_clip, handle_start, handle_end):
|
|||
else:
|
||||
conformed_source_range = source_range
|
||||
|
||||
# Temporary.
|
||||
# Some AYON custom OTIO exporter were implemented with relative
|
||||
# source range for image sequence. Following code maintain
|
||||
# backward-compatibility by adjusting available range
|
||||
# while we are updating those.
|
||||
if (
|
||||
is_input_sequence
|
||||
and available_range.start_time.to_frames() == media_ref.start_frame
|
||||
and conformed_source_range.start_time.to_frames() <
|
||||
media_ref.start_frame
|
||||
):
|
||||
available_range = _ot.TimeRange(
|
||||
_ot.RationalTime(0, rate=available_range_rate),
|
||||
available_range.duration,
|
||||
)
|
||||
|
||||
# modifiers
|
||||
time_scalar = 1.
|
||||
offset_in = 0
|
||||
offset_out = 0
|
||||
time_warp_nodes = []
|
||||
|
||||
# Check for speed effects and adjust playback speed accordingly
|
||||
|
|
@ -354,51 +374,134 @@ def get_media_range_with_retimes(otio_clip, handle_start, handle_end):
|
|||
tw_node.update(metadata)
|
||||
tw_node["lookup"] = list(lookup)
|
||||
|
||||
# get first and last frame offsets
|
||||
offset_in += lookup[0]
|
||||
offset_out += lookup[-1]
|
||||
|
||||
# add to timewarp nodes
|
||||
time_warp_nodes.append(tw_node)
|
||||
|
||||
# multiply by time scalar
|
||||
offset_in *= time_scalar
|
||||
offset_out *= time_scalar
|
||||
|
||||
# scale handles
|
||||
handle_start *= abs(time_scalar)
|
||||
handle_end *= abs(time_scalar)
|
||||
|
||||
# flip offset and handles if reversed speed
|
||||
if time_scalar < 0:
|
||||
offset_in, offset_out = offset_out, offset_in
|
||||
handle_start, handle_end = handle_end, handle_start
|
||||
|
||||
# compute retimed range
|
||||
media_in_trimmed = conformed_source_range.start_time.value + offset_in
|
||||
media_out_trimmed = media_in_trimmed + (
|
||||
(
|
||||
conformed_source_range.duration.value
|
||||
* abs(time_scalar)
|
||||
+ offset_out
|
||||
) - 1
|
||||
)
|
||||
|
||||
media_in = available_range.start_time.value
|
||||
media_out = available_range.end_time_inclusive().value
|
||||
|
||||
# If media source is an image sequence, returned
|
||||
# mediaIn/mediaOut have to correspond
|
||||
# to frame numbers from source sequence.
|
||||
if is_input_sequence:
|
||||
|
||||
src_in = conformed_source_range.start_time
|
||||
src_duration = math.ceil(
|
||||
otio_clip.source_range.duration.value
|
||||
* abs(time_scalar)
|
||||
)
|
||||
retimed_duration = otio.opentime.RationalTime(
|
||||
src_duration,
|
||||
otio_clip.source_range.duration.rate
|
||||
)
|
||||
retimed_duration = retimed_duration.rescaled_to(src_in.rate)
|
||||
|
||||
trim_range = otio.opentime.TimeRange(
|
||||
start_time=src_in,
|
||||
duration=retimed_duration,
|
||||
)
|
||||
|
||||
# preserve discrete frame numbers
|
||||
media_in_trimmed, media_out_trimmed = remap_range_on_file_sequence(
|
||||
otio_clip,
|
||||
(media_in_trimmed, media_out_trimmed)
|
||||
trim_range,
|
||||
)
|
||||
media_in = media_ref.start_frame
|
||||
media_out = media_in + available_range.duration.to_frames() - 1
|
||||
|
||||
else:
|
||||
# compute retimed range
|
||||
media_in_trimmed = conformed_source_range.start_time.value
|
||||
|
||||
offset_duration = (
|
||||
conformed_source_range.duration.value
|
||||
* abs(time_scalar)
|
||||
)
|
||||
|
||||
# Offset duration by 1 for media out frame
|
||||
# - only if duration is not single frame (start frame != end frame)
|
||||
if offset_duration > 0:
|
||||
offset_duration -= 1
|
||||
media_out_trimmed = media_in_trimmed + offset_duration
|
||||
|
||||
media_in = available_range.start_time.value
|
||||
media_out = available_range.end_time_inclusive().value
|
||||
|
||||
if time_warp_nodes:
|
||||
# Naive approach: Resolve consecutive timewarp(s) on range,
|
||||
# then check if plate range has to be extended beyond source range.
|
||||
in_frame = media_in_trimmed
|
||||
frame_range = [in_frame]
|
||||
for _ in range(otio_clip.source_range.duration.to_frames() - 1):
|
||||
in_frame += time_scalar
|
||||
frame_range.append(in_frame)
|
||||
|
||||
# Different editorial DCC might have different TimeWarp logic.
|
||||
# The following logic assumes that the "lookup" list values are
|
||||
# frame offsets relative to the current source frame number.
|
||||
#
|
||||
# media_source_range |______1_____|______2______|______3______|
|
||||
#
|
||||
# media_retimed_range |______2_____|______2______|______3______|
|
||||
#
|
||||
# TimeWarp lookup +1 0 0
|
||||
for tw_idx, tw in enumerate(time_warp_nodes):
|
||||
for idx, frame_number in enumerate(frame_range):
|
||||
# First timewarp, apply on media range
|
||||
if tw_idx == 0:
|
||||
frame_range[idx] = round(
|
||||
frame_number +
|
||||
(tw["lookup"][idx] * time_scalar)
|
||||
)
|
||||
# Consecutive timewarp, apply on the previous result
|
||||
else:
|
||||
new_idx = round(idx + tw["lookup"][idx])
|
||||
|
||||
if 0 <= new_idx < len(frame_range):
|
||||
frame_range[idx] = frame_range[new_idx]
|
||||
continue
|
||||
|
||||
# TODO: implementing this would need to actually have
|
||||
# retiming engine resolve process within AYON,
|
||||
# resolving wraps as curves, then projecting
|
||||
# those into the previous media_range.
|
||||
raise NotImplementedError(
|
||||
"Unsupported consecutive timewarps "
|
||||
"(out of computed range)"
|
||||
)
|
||||
|
||||
# adjust range if needed
|
||||
media_in_trimmed_before_tw = media_in_trimmed
|
||||
media_in_trimmed = max(min(frame_range), media_in)
|
||||
media_out_trimmed = min(max(frame_range), media_out)
|
||||
|
||||
# If TimeWarp changes the first frame of the soure range,
|
||||
# we need to offset the first TimeWarp values accordingly.
|
||||
#
|
||||
# expected_range |______2_____|______2______|______3______|
|
||||
#
|
||||
# EDITORIAL
|
||||
# media_source_range |______1_____|______2______|______3______|
|
||||
#
|
||||
# TimeWarp lookup +1 0 0
|
||||
#
|
||||
# EXTRACTED PLATE
|
||||
# plate_range |______2_____|______3______|_ _ _ _ _ _ _|
|
||||
#
|
||||
# expected TimeWarp 0 -1 -1
|
||||
if media_in_trimmed != media_in_trimmed_before_tw:
|
||||
offset = media_in_trimmed_before_tw - media_in_trimmed
|
||||
offset *= 1.0 / time_scalar
|
||||
time_warp_nodes[0]["lookup"] = [
|
||||
value + offset
|
||||
for value in time_warp_nodes[0]["lookup"]
|
||||
]
|
||||
|
||||
# adjust available handles if needed
|
||||
if (media_in_trimmed - media_in) < handle_start:
|
||||
handle_start = max(0, media_in_trimmed - media_in)
|
||||
|
|
@ -417,16 +520,16 @@ def get_media_range_with_retimes(otio_clip, handle_start, handle_end):
|
|||
"retime": True,
|
||||
"speed": time_scalar,
|
||||
"timewarps": time_warp_nodes,
|
||||
"handleStart": int(handle_start),
|
||||
"handleEnd": int(handle_end)
|
||||
"handleStart": math.ceil(handle_start),
|
||||
"handleEnd": math.ceil(handle_end)
|
||||
}
|
||||
}
|
||||
|
||||
returning_dict = {
|
||||
"mediaIn": media_in_trimmed,
|
||||
"mediaOut": media_out_trimmed,
|
||||
"handleStart": int(handle_start),
|
||||
"handleEnd": int(handle_end),
|
||||
"handleStart": math.ceil(handle_start),
|
||||
"handleEnd": math.ceil(handle_end),
|
||||
"speed": time_scalar
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -464,6 +464,12 @@ def filter_pyblish_plugins(plugins):
|
|||
if getattr(plugin, "enabled", True) is False:
|
||||
plugins.remove(plugin)
|
||||
|
||||
# Pyblish already operated a filter based on host.
|
||||
# But applying settings might have changed "hosts"
|
||||
# value in plugin so re-filter.
|
||||
elif not pyblish.plugin.host_is_compatible(plugin):
|
||||
plugins.remove(plugin)
|
||||
|
||||
|
||||
def get_errored_instances_from_context(context, plugin=None):
|
||||
"""Collect failed instances from pyblish context.
|
||||
|
|
@ -708,6 +714,7 @@ def get_instance_staging_dir(instance):
|
|||
project_settings=context.data["project_settings"],
|
||||
template_data=template_data,
|
||||
always_return_path=True,
|
||||
username=context.data["user"],
|
||||
)
|
||||
|
||||
staging_dir_path = staging_dir_info.directory
|
||||
|
|
@ -716,8 +723,8 @@ def get_instance_staging_dir(instance):
|
|||
os.makedirs(staging_dir_path, exist_ok=True)
|
||||
instance.data.update({
|
||||
"stagingDir": staging_dir_path,
|
||||
"stagingDir_persistent": staging_dir_info.persistent,
|
||||
"stagingDir_custom": staging_dir_info.custom
|
||||
"stagingDir_persistent": staging_dir_info.is_persistent,
|
||||
"stagingDir_is_custom": staging_dir_info.is_custom
|
||||
})
|
||||
|
||||
return staging_dir_path
|
||||
|
|
|
|||
|
|
@ -292,6 +292,9 @@ class OptionalPyblishPluginMixin(AYONPyblishPluginMixin):
|
|||
```
|
||||
"""
|
||||
|
||||
# Allow exposing tooltip from class with `optional_tooltip` attribute
|
||||
optional_tooltip: Optional[str] = None
|
||||
|
||||
@classmethod
|
||||
def get_attribute_defs(cls):
|
||||
"""Attribute definitions based on plugin's optional attribute."""
|
||||
|
|
@ -304,8 +307,14 @@ class OptionalPyblishPluginMixin(AYONPyblishPluginMixin):
|
|||
active = getattr(cls, "active", True)
|
||||
# Return boolean stored under 'active' key with label of the class name
|
||||
label = cls.label or cls.__name__
|
||||
|
||||
return [
|
||||
BoolDef("active", default=active, label=label)
|
||||
BoolDef(
|
||||
"active",
|
||||
default=active,
|
||||
label=label,
|
||||
tooltip=cls.optional_tooltip,
|
||||
)
|
||||
]
|
||||
|
||||
def is_active(self, data):
|
||||
|
|
|
|||
|
|
@ -1,3 +1,6 @@
|
|||
import logging
|
||||
import warnings
|
||||
from typing import Optional, Dict, Any
|
||||
from dataclasses import dataclass
|
||||
|
||||
from ayon_core.lib import Logger, filter_profiles
|
||||
|
|
@ -11,21 +14,41 @@ from .tempdir import get_temp_dir
|
|||
@dataclass
|
||||
class StagingDir:
|
||||
directory: str
|
||||
persistent: bool
|
||||
custom: bool # Whether the staging dir is a custom staging dir
|
||||
is_persistent: bool
|
||||
# Whether the staging dir is a custom staging dir
|
||||
is_custom: bool
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
if key == "persistent":
|
||||
warnings.warn(
|
||||
"'StagingDir.persistent' is deprecated."
|
||||
" Use 'StagingDir.is_persistent' instead.",
|
||||
DeprecationWarning
|
||||
)
|
||||
key = "is_persistent"
|
||||
super().__setattr__(key, value)
|
||||
|
||||
@property
|
||||
def persistent(self):
|
||||
warnings.warn(
|
||||
"'StagingDir.persistent' is deprecated."
|
||||
" Use 'StagingDir.is_persistent' instead.",
|
||||
DeprecationWarning
|
||||
)
|
||||
return self.is_persistent
|
||||
|
||||
|
||||
def get_staging_dir_config(
|
||||
project_name,
|
||||
task_type,
|
||||
task_name,
|
||||
product_type,
|
||||
product_name,
|
||||
host_name,
|
||||
project_settings=None,
|
||||
anatomy=None,
|
||||
log=None,
|
||||
):
|
||||
project_name: str,
|
||||
task_type: Optional[str],
|
||||
task_name: Optional[str],
|
||||
product_type: str,
|
||||
product_name: str,
|
||||
host_name: str,
|
||||
project_settings: Optional[Dict[str, Any]] = None,
|
||||
anatomy: Optional[Anatomy] = None,
|
||||
log: Optional[logging.Logger] = None,
|
||||
) -> Optional[Dict[str, Any]]:
|
||||
"""Get matching staging dir profile.
|
||||
|
||||
Args:
|
||||
|
|
@ -76,7 +99,6 @@ def get_staging_dir_config(
|
|||
|
||||
# get template from template name
|
||||
template_name = profile["template_name"]
|
||||
_validate_template_name(project_name, template_name, anatomy)
|
||||
|
||||
template = anatomy.get_template_item("staging", template_name)
|
||||
|
||||
|
|
@ -93,35 +115,23 @@ def get_staging_dir_config(
|
|||
return {"template": template, "persistence": data_persistence}
|
||||
|
||||
|
||||
def _validate_template_name(project_name, template_name, anatomy):
|
||||
"""Check that staging dir section with appropriate template exist.
|
||||
|
||||
Raises:
|
||||
ValueError - if misconfigured template
|
||||
"""
|
||||
if template_name not in anatomy.templates["staging"]:
|
||||
raise ValueError(
|
||||
f'Anatomy of project "{project_name}" does not have set'
|
||||
f' "{template_name}" template key at Staging Dir category!'
|
||||
)
|
||||
|
||||
|
||||
def get_staging_dir_info(
|
||||
project_entity,
|
||||
folder_entity,
|
||||
task_entity,
|
||||
product_type,
|
||||
product_name,
|
||||
host_name,
|
||||
anatomy=None,
|
||||
project_settings=None,
|
||||
template_data=None,
|
||||
always_return_path=True,
|
||||
force_tmp_dir=False,
|
||||
logger=None,
|
||||
prefix=None,
|
||||
suffix=None,
|
||||
):
|
||||
project_entity: Dict[str, Any],
|
||||
folder_entity: Optional[Dict[str, Any]],
|
||||
task_entity: Optional[Dict[str, Any]],
|
||||
product_type: str,
|
||||
product_name: str,
|
||||
host_name: str,
|
||||
anatomy: Optional[Anatomy] = None,
|
||||
project_settings: Optional[Dict[str, Any]] = None,
|
||||
template_data: Optional[Dict[str, Any]] = None,
|
||||
always_return_path: bool = True,
|
||||
force_tmp_dir: bool = False,
|
||||
logger: Optional[logging.Logger] = None,
|
||||
prefix: Optional[str] = None,
|
||||
suffix: Optional[str] = None,
|
||||
username: Optional[str] = None,
|
||||
) -> Optional[StagingDir]:
|
||||
"""Get staging dir info data.
|
||||
|
||||
If `force_temp` is set, staging dir will be created as tempdir.
|
||||
|
|
@ -148,6 +158,7 @@ def get_staging_dir_info(
|
|||
logger (Optional[logging.Logger]): Logger instance.
|
||||
prefix (Optional[str]) Optional prefix for staging dir name.
|
||||
suffix (Optional[str]): Optional suffix for staging dir name.
|
||||
username (Optional[str]): AYON Username.
|
||||
|
||||
Returns:
|
||||
Optional[StagingDir]: Staging dir info data
|
||||
|
|
@ -161,16 +172,22 @@ def get_staging_dir_info(
|
|||
)
|
||||
|
||||
if force_tmp_dir:
|
||||
return get_temp_dir(
|
||||
return StagingDir(
|
||||
get_temp_dir(
|
||||
project_name=project_entity["name"],
|
||||
anatomy=anatomy,
|
||||
prefix=prefix,
|
||||
suffix=suffix,
|
||||
),
|
||||
is_persistent=False,
|
||||
is_custom=False
|
||||
)
|
||||
|
||||
# making few queries to database
|
||||
ctx_data = get_template_data(
|
||||
project_entity, folder_entity, task_entity, host_name
|
||||
project_entity, folder_entity, task_entity, host_name,
|
||||
settings=project_settings,
|
||||
username=username
|
||||
)
|
||||
|
||||
# add additional data
|
||||
|
|
@ -205,8 +222,8 @@ def get_staging_dir_info(
|
|||
dir_template = staging_dir_config["template"]["directory"]
|
||||
return StagingDir(
|
||||
dir_template.format_strict(ctx_data),
|
||||
persistent=staging_dir_config["persistence"],
|
||||
custom=True
|
||||
is_persistent=staging_dir_config["persistence"],
|
||||
is_custom=True
|
||||
)
|
||||
|
||||
# no config found but force an output
|
||||
|
|
@ -218,8 +235,8 @@ def get_staging_dir_info(
|
|||
prefix=prefix,
|
||||
suffix=suffix,
|
||||
),
|
||||
persistent=False,
|
||||
custom=False
|
||||
is_persistent=False,
|
||||
is_custom=False
|
||||
)
|
||||
|
||||
return None
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from ayon_core.settings import get_studio_settings
|
|||
from ayon_core.lib.local_settings import get_ayon_username
|
||||
|
||||
|
||||
def get_general_template_data(settings=None):
|
||||
def get_general_template_data(settings=None, username=None):
|
||||
"""General template data based on system settings or machine.
|
||||
|
||||
Output contains formatting keys:
|
||||
|
|
@ -14,17 +14,22 @@ def get_general_template_data(settings=None):
|
|||
|
||||
Args:
|
||||
settings (Dict[str, Any]): Studio or project settings.
|
||||
username (Optional[str]): AYON Username.
|
||||
"""
|
||||
|
||||
if not settings:
|
||||
settings = get_studio_settings()
|
||||
|
||||
if username is None:
|
||||
username = get_ayon_username()
|
||||
|
||||
core_settings = settings["core"]
|
||||
return {
|
||||
"studio": {
|
||||
"name": core_settings["studio_name"],
|
||||
"code": core_settings["studio_code"]
|
||||
},
|
||||
"user": get_ayon_username()
|
||||
"user": username
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -145,6 +150,7 @@ def get_template_data(
|
|||
task_entity=None,
|
||||
host_name=None,
|
||||
settings=None,
|
||||
username=None
|
||||
):
|
||||
"""Prepare data for templates filling from entered documents and info.
|
||||
|
||||
|
|
@ -167,12 +173,13 @@ def get_template_data(
|
|||
host_name (Optional[str]): Used to fill '{app}' key.
|
||||
settings (Union[Dict, None]): Prepared studio or project settings.
|
||||
They're queried if not passed (may be slower).
|
||||
username (Optional[str]): AYON Username.
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Data prepared for filling workdir template.
|
||||
"""
|
||||
|
||||
template_data = get_general_template_data(settings)
|
||||
template_data = get_general_template_data(settings, username=username)
|
||||
template_data.update(get_project_template_data(project_entity))
|
||||
if folder_entity:
|
||||
template_data.update(get_folder_template_data(
|
||||
|
|
|
|||
|
|
@ -165,6 +165,8 @@ to different packages based on their use:
|
|||
| | Variant | Used to differentiate between data variants of the same output (mp4 as h.264 and h.265 for example)
|
||||
| | KeepOriginalLocation | Marks the representation to keep the original location of the file
|
||||
| | KeepOriginalName | Marks the representation to keep the original name of the file
|
||||
| | SourceApplication | Holds information about producing application, about it's version, variant and platform.
|
||||
| | IntendedUse | For specifying the intended use of the representation if it cannot be easily determined by other traits.
|
||||
| three dimensional | Spatial | Spatial information like up-axis, units and handedness.
|
||||
| | Geometry | Type trait to mark the representation as a geometry.
|
||||
| | Shader | Type trait to mark the representation as a Shader.
|
||||
|
|
|
|||
|
|
@ -12,10 +12,16 @@ from .content import (
|
|||
)
|
||||
from .cryptography import DigitallySigned, PGPSigned
|
||||
from .lifecycle import Persistent, Transient
|
||||
from .meta import Tagged, TemplatePath, Variant
|
||||
from .meta import (
|
||||
IntendedUse,
|
||||
KeepOriginalLocation,
|
||||
SourceApplication,
|
||||
Tagged,
|
||||
TemplatePath,
|
||||
Variant,
|
||||
)
|
||||
from .representation import Representation
|
||||
from .three_dimensional import Geometry, IESProfile, Lighting, Shader, Spatial
|
||||
from .time import (
|
||||
from .temporal import (
|
||||
FrameRanged,
|
||||
GapPolicy,
|
||||
Handles,
|
||||
|
|
@ -23,6 +29,7 @@ from .time import (
|
|||
SMPTETimecode,
|
||||
Static,
|
||||
)
|
||||
from .three_dimensional import Geometry, IESProfile, Lighting, Shader, Spatial
|
||||
from .trait import (
|
||||
MissingTraitError,
|
||||
TraitBase,
|
||||
|
|
@ -40,25 +47,25 @@ from .utils import (
|
|||
get_sequence_from_files,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
__all__ = [ # noqa: RUF022
|
||||
# base
|
||||
"Representation",
|
||||
"TraitBase",
|
||||
"MissingTraitError",
|
||||
"TraitValidationError",
|
||||
|
||||
# color
|
||||
"ColorManaged",
|
||||
|
||||
# content
|
||||
"Bundle",
|
||||
"Compressed",
|
||||
"FileLocation",
|
||||
"FileLocations",
|
||||
"MimeType",
|
||||
"RootlessLocation",
|
||||
"Fragment",
|
||||
"LocatableContent",
|
||||
|
||||
# color
|
||||
"ColorManaged",
|
||||
"MimeType",
|
||||
"RootlessLocation",
|
||||
|
||||
# cryptography
|
||||
"DigitallySigned",
|
||||
|
|
@ -69,10 +76,28 @@ __all__ = [
|
|||
"Transient",
|
||||
|
||||
# meta
|
||||
"IntendedUse",
|
||||
"KeepOriginalLocation",
|
||||
"SourceApplication",
|
||||
"Tagged",
|
||||
"TemplatePath",
|
||||
"Variant",
|
||||
|
||||
# temporal
|
||||
"FrameRanged",
|
||||
"GapPolicy",
|
||||
"Handles",
|
||||
"Sequence",
|
||||
"SMPTETimecode",
|
||||
"Static",
|
||||
|
||||
# three-dimensional
|
||||
"Geometry",
|
||||
"IESProfile",
|
||||
"Lighting",
|
||||
"Shader",
|
||||
"Spatial",
|
||||
|
||||
# two-dimensional
|
||||
"Compressed",
|
||||
"Deep",
|
||||
|
|
@ -82,21 +107,6 @@ __all__ = [
|
|||
"Planar",
|
||||
"UDIM",
|
||||
|
||||
# three-dimensional
|
||||
"Geometry",
|
||||
"IESProfile",
|
||||
"Lighting",
|
||||
"Shader",
|
||||
"Spatial",
|
||||
|
||||
# time
|
||||
"FrameRanged",
|
||||
"Static",
|
||||
"Handles",
|
||||
"GapPolicy",
|
||||
"Sequence",
|
||||
"SMPTETimecode",
|
||||
|
||||
# utils
|
||||
"get_sequence_from_files",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ class ColorManaged(TraitBase):
|
|||
in the "current" OCIO context.
|
||||
config (str): An OCIO config name defining color space.
|
||||
"""
|
||||
|
||||
id: ClassVar[str] = "ayon.color.ColorManaged.v1"
|
||||
name: ClassVar[str] = "ColorManaged"
|
||||
description: ClassVar[str] = "Color Managed trait."
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ from typing import ClassVar, Generator, Optional
|
|||
from pydantic import Field
|
||||
|
||||
from .representation import Representation
|
||||
from .time import FrameRanged, Handles, Sequence
|
||||
from .temporal import FrameRanged, Handles, Sequence
|
||||
from .trait import (
|
||||
MissingTraitError,
|
||||
TraitBase,
|
||||
|
|
@ -35,7 +35,6 @@ class MimeType(TraitBase):
|
|||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
mime_type (str): Mime type like image/jpeg.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "MimeType"
|
||||
|
|
@ -43,6 +42,7 @@ class MimeType(TraitBase):
|
|||
id: ClassVar[str] = "ayon.content.MimeType.v1"
|
||||
mime_type: str = Field(..., title="Mime Type")
|
||||
|
||||
|
||||
class LocatableContent(TraitBase):
|
||||
"""LocatableContent trait model.
|
||||
|
||||
|
|
@ -57,7 +57,6 @@ class LocatableContent(TraitBase):
|
|||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
location (str): Location.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "LocatableContent"
|
||||
|
|
@ -66,6 +65,7 @@ class LocatableContent(TraitBase):
|
|||
location: str = Field(..., title="Location")
|
||||
is_templated: Optional[bool] = Field(default=None, title="Is Templated")
|
||||
|
||||
|
||||
class FileLocation(TraitBase):
|
||||
"""FileLocation trait model.
|
||||
|
||||
|
|
@ -80,8 +80,8 @@ class FileLocation(TraitBase):
|
|||
file_path (str): File path.
|
||||
file_size (int): File size in bytes.
|
||||
file_hash (str): File hash.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "FileLocation"
|
||||
description: ClassVar[str] = "FileLocation Trait Model"
|
||||
id: ClassVar[str] = "ayon.content.FileLocation.v1"
|
||||
|
|
@ -89,6 +89,7 @@ class FileLocation(TraitBase):
|
|||
file_size: Optional[int] = Field(default=None, title="File Size")
|
||||
file_hash: Optional[str] = Field(default=None, title="File Hash")
|
||||
|
||||
|
||||
class FileLocations(TraitBase):
|
||||
"""FileLocation trait model.
|
||||
|
||||
|
|
@ -114,7 +115,7 @@ class FileLocations(TraitBase):
|
|||
|
||||
This method will return all file paths from the trait.
|
||||
|
||||
Yeilds:
|
||||
Yields:
|
||||
Path: List of file paths.
|
||||
|
||||
"""
|
||||
|
|
@ -356,7 +357,6 @@ class RootlessLocation(TraitBase):
|
|||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
rootless_path (str): Rootless path.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "RootlessLocation"
|
||||
|
|
@ -380,7 +380,6 @@ class Compressed(TraitBase):
|
|||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
compression_type (str): Compression type.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Compressed"
|
||||
|
|
@ -419,7 +418,6 @@ class Bundle(TraitBase):
|
|||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
items (list[list[TraitBase]]): List of representations.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Bundle"
|
||||
|
|
@ -434,7 +432,6 @@ class Bundle(TraitBase):
|
|||
yield Representation(name=f"{self.name} {idx}", traits=item)
|
||||
|
||||
|
||||
|
||||
class Fragment(TraitBase):
|
||||
"""Fragment trait model.
|
||||
|
||||
|
|
@ -458,7 +455,6 @@ class Fragment(TraitBase):
|
|||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
parent (str): Parent representation id.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Fragment"
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ class DigitallySigned(TraitBase):
|
|||
Attributes:
|
||||
signature (str): Digital signature.
|
||||
"""
|
||||
|
||||
id: ClassVar[str] = "ayon.cryptography.DigitallySigned.v1"
|
||||
name: ClassVar[str] = "DigitallySigned"
|
||||
description: ClassVar[str] = "Digitally signed trait."
|
||||
|
|
@ -29,6 +30,7 @@ class PGPSigned(DigitallySigned):
|
|||
Attributes:
|
||||
signature (str): PGP signature.
|
||||
"""
|
||||
|
||||
id: ClassVar[str] = "ayon.cryptography.PGPSigned.v1"
|
||||
name: ClassVar[str] = "PGPSigned"
|
||||
description: ClassVar[str] = "PGP signed trait."
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
"""Metadata traits."""
|
||||
from typing import ClassVar, List
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import ClassVar, List, Optional
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
|
|
@ -86,16 +88,58 @@ class KeepOriginalLocation(TraitBase):
|
|||
name: ClassVar[str] = "KeepOriginalLocation"
|
||||
description: ClassVar[str] = "Keep Original Location Trait Model"
|
||||
id: ClassVar[str] = "ayon.meta.KeepOriginalLocation.v1"
|
||||
persistent: bool = Field(False, title="Persistent")
|
||||
persistent: bool = Field(default=False, title="Persistent")
|
||||
|
||||
class KeepOriginalName(TraitBase):
|
||||
"""Keep files in its original name.
|
||||
|
||||
Note:
|
||||
This is not a persistent trait.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "KeepOriginalName"
|
||||
description: ClassVar[str] = "Keep Original Name Trait Model"
|
||||
id: ClassVar[str] = "ayon.meta.KeepOriginalName.v1"
|
||||
persistent: bool = Field(False, title="Persistent")
|
||||
persistent: bool = Field(default=False, title="Persistent")
|
||||
|
||||
|
||||
class SourceApplication(TraitBase):
|
||||
"""Metadata about the source (producing) application.
|
||||
|
||||
This can be useful in cases, where this information is
|
||||
needed but it cannot be determined from other means - like
|
||||
.txt files used for various motion tracking applications that
|
||||
must be interpreted by the loader.
|
||||
|
||||
Note that this is not really connected to any logic in
|
||||
ayon-applications addon.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "SourceApplication"
|
||||
description: ClassVar[str] = "Source Application Trait Model"
|
||||
id: ClassVar[str] = "ayon.meta.SourceApplication.v1"
|
||||
application: str = Field(..., title="Application Name")
|
||||
variant: Optional[str] = Field(
|
||||
None, title="Application Variant (e.g. Pro)")
|
||||
version: Optional[str] = Field(
|
||||
None, title="Application Version")
|
||||
platform: Optional[str] = Field(
|
||||
None, title="Platform Name (e.g. Windows)")
|
||||
host_name: Optional[str] = Field(
|
||||
None, title="AYON host Name if applicable")
|
||||
|
||||
|
||||
class IntendedUse(TraitBase):
|
||||
"""Intended use of the representation.
|
||||
|
||||
This trait describes the intended use of the representation. It
|
||||
can be used in cases, where the other traits are not enough to
|
||||
describe the intended use. For example txt file with tracking
|
||||
points can be used as corner pin in After Effect but not in Nuke.
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "IntendedUse"
|
||||
description: ClassVar[str] = "Intended Use Trait Model"
|
||||
id: ClassVar[str] = "ayon.meta.IntendedUse.v1"
|
||||
use: str = Field(..., title="Intended Use")
|
||||
|
|
|
|||
|
|
@ -8,18 +8,25 @@ import sys
|
|||
import uuid
|
||||
from functools import lru_cache
|
||||
from types import GenericAlias
|
||||
from typing import ClassVar, Generic, ItemsView, Optional, Type, TypeVar, Union
|
||||
from typing import (
|
||||
ClassVar,
|
||||
Generic,
|
||||
ItemsView,
|
||||
Optional,
|
||||
Type,
|
||||
TypeVar,
|
||||
Union,
|
||||
)
|
||||
|
||||
from .trait import (
|
||||
IncompatibleTraitVersionError,
|
||||
LooseMatchingTraitError,
|
||||
MissingTraitError,
|
||||
TraitBase,
|
||||
UpgradableTraitError,
|
||||
TraitValidationError,
|
||||
UpgradableTraitError,
|
||||
)
|
||||
|
||||
|
||||
T = TypeVar("T", bound="TraitBase")
|
||||
|
||||
|
||||
|
|
@ -50,8 +57,8 @@ class Representation(Generic[T]):
|
|||
Arguments:
|
||||
name (str): Representation name. Must be unique within instance.
|
||||
representation_id (str): Representation ID.
|
||||
|
||||
"""
|
||||
|
||||
_data: dict[str, T]
|
||||
_module_blacklist: ClassVar[list[str]] = [
|
||||
"_", "builtins", "pydantic",
|
||||
|
|
@ -333,7 +340,7 @@ class Representation(Generic[T]):
|
|||
),
|
||||
None,
|
||||
)
|
||||
if not result:
|
||||
if result is None:
|
||||
msg = f"Trait with ID {trait_id} not found."
|
||||
raise MissingTraitError(msg)
|
||||
return result
|
||||
|
|
@ -407,6 +414,7 @@ class Representation(Generic[T]):
|
|||
name (str): Representation name. Must be unique within instance.
|
||||
representation_id (str, optional): Representation ID.
|
||||
traits (list[TraitBase], optional): List of traits.
|
||||
|
||||
"""
|
||||
self.name = name
|
||||
self.representation_id = representation_id or uuid.uuid4().hex
|
||||
|
|
@ -503,7 +511,8 @@ class Representation(Generic[T]):
|
|||
if issubclass(klass, TraitBase) \
|
||||
and str(klass.id).startswith(trait_id):
|
||||
trait_candidates.add(klass)
|
||||
return trait_candidates # type: ignore
|
||||
# I
|
||||
return trait_candidates # type: ignore[return-value]
|
||||
|
||||
@classmethod
|
||||
@lru_cache(maxsize=64)
|
||||
|
|
@ -607,7 +616,6 @@ class Representation(Generic[T]):
|
|||
)
|
||||
raise IncompatibleTraitVersionError(msg) from e
|
||||
|
||||
else:
|
||||
if requested_version > found_version:
|
||||
error_msg = (
|
||||
f"Requested trait version {requested_version} is "
|
||||
|
|
@ -625,11 +633,11 @@ class Representation(Generic[T]):
|
|||
error: UpgradableTraitError = UpgradableTraitError(error_msg)
|
||||
error.trait = e.found_trait
|
||||
raise error from e
|
||||
return trait_class
|
||||
return trait_class # type: ignore[return-value]
|
||||
|
||||
@classmethod
|
||||
def from_dict(
|
||||
cls,
|
||||
cls: Type[Representation],
|
||||
name: str,
|
||||
representation_id: Optional[str] = None,
|
||||
trait_data: Optional[dict] = None) -> Representation:
|
||||
|
|
@ -701,10 +709,12 @@ class Representation(Generic[T]):
|
|||
"""
|
||||
errors = []
|
||||
for trait in self._data.values():
|
||||
# we do this in the loop to catch all the errors
|
||||
try:
|
||||
trait.validate_trait(self)
|
||||
except TraitValidationError as e:
|
||||
except TraitValidationError as e: # noqa: PERF203
|
||||
errors.append(str(e))
|
||||
if errors:
|
||||
raise TraitValidationError(
|
||||
f"representation {self.name}", "\n".join(errors))
|
||||
msg = "\n".join(errors)
|
||||
scope = self.name
|
||||
raise TraitValidationError(scope, msg)
|
||||
|
|
|
|||
|
|
@ -2,20 +2,18 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import contextlib
|
||||
import re
|
||||
from enum import Enum, auto
|
||||
from re import Pattern
|
||||
from typing import TYPE_CHECKING, ClassVar, Optional, Union
|
||||
|
||||
import clique
|
||||
from pydantic import Field, field_validator
|
||||
import re
|
||||
from re import Pattern
|
||||
|
||||
from .trait import MissingTraitError, TraitBase, TraitValidationError
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
||||
|
||||
from pathlib import Path
|
||||
from .content import FileLocations
|
||||
from .representation import Representation
|
||||
|
||||
|
|
@ -31,11 +29,13 @@ class GapPolicy(Enum):
|
|||
hold (int): Gaps are interpreted as hold frames (last existing frames).
|
||||
black (int): Gaps are interpreted as black frames.
|
||||
"""
|
||||
|
||||
forbidden = auto()
|
||||
missing = auto()
|
||||
hold = auto()
|
||||
black = auto()
|
||||
|
||||
|
||||
class FrameRanged(TraitBase):
|
||||
"""Frame ranged trait model.
|
||||
|
||||
|
|
@ -65,8 +65,8 @@ class FrameRanged(TraitBase):
|
|||
frame_out (int): Frame out.
|
||||
frames_per_second (str): Frames per second.
|
||||
step (int): Step.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "FrameRanged"
|
||||
description: ClassVar[str] = "Frame Ranged Trait"
|
||||
id: ClassVar[str] = "ayon.time.FrameRanged.v1"
|
||||
|
|
@ -93,8 +93,8 @@ class Handles(TraitBase):
|
|||
inclusive (bool): Handles are inclusive.
|
||||
frame_start_handle (int): Frame start handle.
|
||||
frame_end_handle (int): Frame end handle.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Handles"
|
||||
description: ClassVar[str] = "Handles Trait"
|
||||
id: ClassVar[str] = "ayon.time.Handles.v1"
|
||||
|
|
@ -105,6 +105,7 @@ class Handles(TraitBase):
|
|||
frame_end_handle: Optional[int] = Field(
|
||||
0, title="Frame End Handle")
|
||||
|
||||
|
||||
class Sequence(TraitBase):
|
||||
"""Sequence trait model.
|
||||
|
||||
|
|
@ -124,21 +125,24 @@ class Sequence(TraitBase):
|
|||
named group.
|
||||
frame_spec (str): Frame list specification of frames. This takes
|
||||
string like "1-10,20-30,40-50" etc.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Sequence"
|
||||
description: ClassVar[str] = "Sequence Trait Model"
|
||||
id: ClassVar[str] = "ayon.time.Sequence.v1"
|
||||
gaps_policy: Optional[GapPolicy] = Field(
|
||||
default=GapPolicy.forbidden, title="Gaps Policy")
|
||||
frame_padding: int = Field(..., title="Frame Padding")
|
||||
frame_regex: Optional[Union[Pattern, str]] = Field(default=None, title="Frame Regex")
|
||||
frame_spec: Optional[str] = Field(default=None, title="Frame Specification")
|
||||
frame_regex: Optional[Union[Pattern, str]] = Field(
|
||||
default=None, title="Frame Regex")
|
||||
frame_spec: Optional[str] = Field(default=None,
|
||||
title="Frame Specification")
|
||||
|
||||
@field_validator("frame_regex")
|
||||
@classmethod
|
||||
def validate_frame_regex(
|
||||
cls, v: Optional[Union[Pattern, str]]) -> Optional[Union[Pattern, str]]:
|
||||
cls, v: Optional[Union[Pattern, str]]
|
||||
) -> Optional[Union[Pattern, str]]:
|
||||
"""Validate frame regex."""
|
||||
_v = v
|
||||
if v and isinstance(v, Pattern):
|
||||
|
|
@ -205,8 +209,7 @@ class Sequence(TraitBase):
|
|||
|
||||
self.validate_frame_padding(file_locs)
|
||||
|
||||
|
||||
def validate_frame_list(
|
||||
def validate_frame_list( # noqa: C901
|
||||
self,
|
||||
file_locations: FileLocations,
|
||||
frame_start: Optional[int] = None,
|
||||
|
|
@ -329,7 +332,6 @@ class Sequence(TraitBase):
|
|||
frames.extend(range(int(start), int(end) + 1))
|
||||
return frames
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _get_collection(
|
||||
file_locations: FileLocations,
|
||||
|
|
@ -405,9 +407,11 @@ class Sequence(TraitBase):
|
|||
return re.compile(
|
||||
r"\.(?P<index>(?P<padding>0*)\d+)\.\D+\d?$")
|
||||
|
||||
|
||||
# Do we need one for drop and non-drop frame?
|
||||
class SMPTETimecode(TraitBase):
|
||||
"""SMPTE Timecode trait model."""
|
||||
|
||||
name: ClassVar[str] = "Timecode"
|
||||
description: ClassVar[str] = "SMPTE Timecode Trait"
|
||||
id: ClassVar[str] = "ayon.time.SMPTETimecode.v1"
|
||||
|
|
@ -418,8 +422,8 @@ class Static(TraitBase):
|
|||
"""Static time trait.
|
||||
|
||||
Used to define static time (single frame).
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Static"
|
||||
description: ClassVar[str] = "Static Time Trait"
|
||||
id: ClassVar[str] = "ayon.time.Static.v1"
|
||||
|
|
@ -24,8 +24,8 @@ class Spatial(TraitBase):
|
|||
up_axis (str): Up axis.
|
||||
handedness (str): Handedness.
|
||||
meters_per_unit (float): Meters per unit.
|
||||
|
||||
"""
|
||||
|
||||
id: ClassVar[str] = "ayon.3d.Spatial.v1"
|
||||
name: ClassVar[str] = "Spatial"
|
||||
description: ClassVar[str] = "Spatial trait model."
|
||||
|
|
@ -46,6 +46,7 @@ class Geometry(TraitBase):
|
|||
name: ClassVar[str] = "Geometry"
|
||||
description: ClassVar[str] = "Geometry trait model."
|
||||
|
||||
|
||||
class Shader(TraitBase):
|
||||
"""Shader trait model.
|
||||
|
||||
|
|
@ -58,6 +59,7 @@ class Shader(TraitBase):
|
|||
name: ClassVar[str] = "Shader"
|
||||
description: ClassVar[str] = "Shader trait model."
|
||||
|
||||
|
||||
class Lighting(TraitBase):
|
||||
"""Lighting trait model.
|
||||
|
||||
|
|
@ -70,6 +72,7 @@ class Lighting(TraitBase):
|
|||
name: ClassVar[str] = "Lighting"
|
||||
description: ClassVar[str] = "Lighting trait model."
|
||||
|
||||
|
||||
class IESProfile(TraitBase):
|
||||
"""IES profile (IES-LM-64) type trait model.
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ class TraitBase(ABC, BaseModel):
|
|||
It is using Pydantic BaseModel for serialization and validation.
|
||||
``id``, ``name``, and ``description`` are abstract attributes that must be
|
||||
implemented in the derived classes.
|
||||
|
||||
"""
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
|
@ -118,6 +117,7 @@ class UpgradableTraitError(Generic[T], Exception):
|
|||
trait: T
|
||||
old_data: dict
|
||||
|
||||
|
||||
class LooseMatchingTraitError(Generic[T], Exception):
|
||||
"""Loose matching trait exception.
|
||||
|
||||
|
|
@ -128,6 +128,7 @@ class LooseMatchingTraitError(Generic[T], Exception):
|
|||
found_trait: T
|
||||
expected_id: str
|
||||
|
||||
|
||||
class TraitValidationError(Exception):
|
||||
"""Trait validation error exception.
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ from .trait import TraitBase
|
|||
if TYPE_CHECKING:
|
||||
from .content import FileLocation, FileLocations
|
||||
|
||||
|
||||
class Image(TraitBase):
|
||||
"""Image trait model.
|
||||
|
||||
|
|
@ -20,7 +21,6 @@ class Image(TraitBase):
|
|||
name (str): Trait name.
|
||||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Image"
|
||||
|
|
@ -40,7 +40,6 @@ class PixelBased(TraitBase):
|
|||
display_window_width (int): Width of the image display window.
|
||||
display_window_height (int): Height of the image display window.
|
||||
pixel_aspect_ratio (float): Pixel aspect ratio.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "PixelBased"
|
||||
|
|
@ -66,7 +65,6 @@ class Planar(TraitBase):
|
|||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
planar_configuration (str): Planar configuration.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Planar"
|
||||
|
|
@ -84,7 +82,6 @@ class Deep(TraitBase):
|
|||
name (str): Trait name.
|
||||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Deep"
|
||||
|
|
@ -106,7 +103,6 @@ class Overscan(TraitBase):
|
|||
right (int): Right overscan/underscan.
|
||||
top (int): Top overscan/underscan.
|
||||
bottom (int): Bottom overscan/underscan.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "Overscan"
|
||||
|
|
@ -128,7 +124,6 @@ class UDIM(TraitBase):
|
|||
description (str): Trait description.
|
||||
id (str): id should be namespaced trait name with version
|
||||
udim (int): UDIM value.
|
||||
|
||||
"""
|
||||
|
||||
name: ClassVar[str] = "UDIM"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ from typing import TYPE_CHECKING
|
|||
|
||||
from clique import assemble
|
||||
|
||||
from ayon_core.pipeline.traits.time import FrameRanged
|
||||
from ayon_core.pipeline.traits.temporal import FrameRanged
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from pathlib import Path
|
||||
|
|
@ -15,6 +15,8 @@ def get_sequence_from_files(paths: list[Path]) -> FrameRanged:
|
|||
"""Get original frame range from files.
|
||||
|
||||
Note that this cannot guess frame rate, so it's set to 25.
|
||||
This will also fail on paths that cannot be assembled into
|
||||
one collection without any reminders.
|
||||
|
||||
Args:
|
||||
paths (list[Path]): List of file paths.
|
||||
|
|
@ -23,7 +25,15 @@ def get_sequence_from_files(paths: list[Path]) -> FrameRanged:
|
|||
FrameRanged: FrameRanged trait.
|
||||
|
||||
"""
|
||||
col = assemble([path.as_posix() for path in paths])[0][0]
|
||||
cols, rems = assemble([path.as_posix() for path in paths])
|
||||
if rems:
|
||||
msg = "Cannot assemble paths into one collection"
|
||||
raise ValueError(msg)
|
||||
if len(cols) != 1:
|
||||
msg = "More than one collection found"
|
||||
raise ValueError(msg)
|
||||
col = cols[0]
|
||||
|
||||
sorted_frames = sorted(col.indexes)
|
||||
# First frame used for end value
|
||||
first_frame = sorted_frames[0]
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ class CollectCoreJobEnvVars(pyblish.api.ContextPlugin):
|
|||
# NOTE we should use 'context.data["user"]' but that has higher
|
||||
# order.
|
||||
("AYON_USERNAME", get_ayon_username()),
|
||||
("AYON_HOST_NAME", context.data["hostName"]),
|
||||
):
|
||||
if value:
|
||||
self.log.debug(f"Setting job env: {key}: {value}")
|
||||
|
|
|
|||
|
|
@ -36,6 +36,16 @@ class CollectOtioReview(pyblish.api.InstancePlugin):
|
|||
# optionally get `reviewTrack`
|
||||
review_track_name = instance.data.get("reviewTrack")
|
||||
|
||||
# [clip_media] setting:
|
||||
# Extract current clip source range as reviewable.
|
||||
# Flag review content from otio_clip.
|
||||
if not review_track_name and "review" in instance.data["families"]:
|
||||
otio_review_clips = [otio_clip]
|
||||
|
||||
# skip if no review track available
|
||||
elif not review_track_name:
|
||||
return
|
||||
|
||||
# generate range in parent
|
||||
otio_tl_range = otio_clip.range_in_parent()
|
||||
|
||||
|
|
@ -43,12 +53,14 @@ class CollectOtioReview(pyblish.api.InstancePlugin):
|
|||
clip_frame_end = int(
|
||||
otio_tl_range.start_time.value + otio_tl_range.duration.value)
|
||||
|
||||
# skip if no review track available
|
||||
if not review_track_name:
|
||||
return
|
||||
|
||||
# loop all tracks and match with name in `reviewTrack`
|
||||
for track in otio_timeline.tracks:
|
||||
|
||||
# No review track defined, skip the loop
|
||||
if review_track_name is None:
|
||||
break
|
||||
|
||||
# Not current review track, skip it.
|
||||
if review_track_name != track.name:
|
||||
continue
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ Provides:
|
|||
instance -> otioReviewClips
|
||||
"""
|
||||
import os
|
||||
import math
|
||||
|
||||
import clique
|
||||
import pyblish.api
|
||||
|
|
@ -69,9 +70,17 @@ class CollectOtioSubsetResources(
|
|||
self.log.debug(
|
||||
">> retimed_attributes: {}".format(retimed_attributes))
|
||||
|
||||
# break down into variables
|
||||
media_in = int(retimed_attributes["mediaIn"])
|
||||
media_out = int(retimed_attributes["mediaOut"])
|
||||
# break down into variables as rounded frame numbers
|
||||
#
|
||||
# 0 1 2 3 4
|
||||
# |-------------|---------------|--------------|-------------|
|
||||
# |_______________media range_______________|
|
||||
# 0.6 3.2
|
||||
#
|
||||
# As rounded frames, media_in = 0 and media_out = 4
|
||||
media_in = math.floor(retimed_attributes["mediaIn"])
|
||||
media_out = math.ceil(retimed_attributes["mediaOut"])
|
||||
|
||||
handle_start = int(retimed_attributes["handleStart"])
|
||||
handle_end = int(retimed_attributes["handleEnd"])
|
||||
|
||||
|
|
@ -149,7 +158,6 @@ class CollectOtioSubsetResources(
|
|||
|
||||
self.log.info(
|
||||
"frame_start-frame_end: {}-{}".format(frame_start, frame_end))
|
||||
review_repre = None
|
||||
|
||||
if is_sequence:
|
||||
# file sequence way
|
||||
|
|
@ -174,17 +182,18 @@ class CollectOtioSubsetResources(
|
|||
path, trimmed_media_range_h, metadata)
|
||||
self.staging_dir, collection = collection_data
|
||||
|
||||
if len(collection.indexes) > 1:
|
||||
self.log.debug(collection)
|
||||
repre = self._create_representation(
|
||||
frame_start, frame_end, collection=collection)
|
||||
else:
|
||||
filename = tuple(collection)[0]
|
||||
self.log.debug(filename)
|
||||
|
||||
# TODO: discuss this, it erases frame number.
|
||||
repre = self._create_representation(
|
||||
frame_start, frame_end, file=filename)
|
||||
|
||||
if (
|
||||
not instance.data.get("otioReviewClips")
|
||||
and "review" in instance.data["families"]
|
||||
):
|
||||
review_repre = self._create_representation(
|
||||
frame_start, frame_end, collection=collection,
|
||||
delete=True, review=True)
|
||||
|
||||
else:
|
||||
_trim = False
|
||||
|
|
@ -200,13 +209,6 @@ class CollectOtioSubsetResources(
|
|||
repre = self._create_representation(
|
||||
frame_start, frame_end, file=filename, trim=_trim)
|
||||
|
||||
if (
|
||||
not instance.data.get("otioReviewClips")
|
||||
and "review" in instance.data["families"]
|
||||
):
|
||||
review_repre = self._create_representation(
|
||||
frame_start, frame_end,
|
||||
file=filename, delete=True, review=True)
|
||||
|
||||
instance.data["originalDirname"] = self.staging_dir
|
||||
|
||||
|
|
@ -219,9 +221,6 @@ class CollectOtioSubsetResources(
|
|||
|
||||
instance.data["representations"].append(repre)
|
||||
|
||||
# add review representation to instance data
|
||||
if review_repre:
|
||||
instance.data["representations"].append(review_repre)
|
||||
|
||||
self.log.debug(instance.data)
|
||||
|
||||
|
|
|
|||
|
|
@ -93,8 +93,7 @@ class CollectRenderedFiles(pyblish.api.ContextPlugin):
|
|||
|
||||
# now we can just add instances from json file and we are done
|
||||
any_staging_dir_persistent = False
|
||||
for instance_data in data.get("instances"):
|
||||
|
||||
for instance_data in data["instances"]:
|
||||
self.log.debug(" - processing instance for {}".format(
|
||||
instance_data.get("productName")))
|
||||
instance = self._context.create_instance(
|
||||
|
|
@ -105,7 +104,11 @@ class CollectRenderedFiles(pyblish.api.ContextPlugin):
|
|||
instance.data.update(instance_data)
|
||||
|
||||
# stash render job id for later validation
|
||||
instance.data["render_job_id"] = data.get("job").get("_id")
|
||||
instance.data["publishJobMetadata"] = data
|
||||
# TODO remove 'render_job_id' here and rather use
|
||||
# 'publishJobMetadata' where is needed.
|
||||
# - this is deadline specific
|
||||
instance.data["render_job_id"] = data.get("job", {}).get("_id")
|
||||
staging_dir_persistent = instance.data.get(
|
||||
"stagingDir_persistent", False
|
||||
)
|
||||
|
|
|
|||
|
|
@ -66,7 +66,8 @@ class CollectResourcesPath(pyblish.api.InstancePlugin):
|
|||
"yeticacheUE",
|
||||
"tycache",
|
||||
"usd",
|
||||
"oxrig"
|
||||
"oxrig",
|
||||
"sbsar",
|
||||
]
|
||||
|
||||
def process(self, instance):
|
||||
|
|
|
|||
|
|
@ -14,23 +14,7 @@ class CollectSceneVersion(pyblish.api.ContextPlugin):
|
|||
order = pyblish.api.CollectorOrder
|
||||
label = 'Collect Scene Version'
|
||||
# configurable in Settings
|
||||
hosts = [
|
||||
"aftereffects",
|
||||
"blender",
|
||||
"celaction",
|
||||
"fusion",
|
||||
"harmony",
|
||||
"hiero",
|
||||
"houdini",
|
||||
"maya",
|
||||
"max",
|
||||
"nuke",
|
||||
"photoshop",
|
||||
"resolve",
|
||||
"tvpaint",
|
||||
"motionbuilder",
|
||||
"substancepainter"
|
||||
]
|
||||
hosts = ["*"]
|
||||
|
||||
# in some cases of headless publishing (for example webpublisher using PS)
|
||||
# you want to ignore version from name and let integrate use next version
|
||||
|
|
|
|||
|
|
@ -147,7 +147,6 @@ class ExtractOTIOReview(
|
|||
self.actual_fps = available_range.duration.rate
|
||||
start = src_range.start_time.rescaled_to(self.actual_fps)
|
||||
duration = src_range.duration.rescaled_to(self.actual_fps)
|
||||
src_frame_start = src_range.start_time.to_frames()
|
||||
|
||||
# Temporary.
|
||||
# Some AYON custom OTIO exporter were implemented with
|
||||
|
|
@ -157,7 +156,7 @@ class ExtractOTIOReview(
|
|||
if (
|
||||
is_clip_from_media_sequence(r_otio_cl)
|
||||
and available_range_start_frame == media_ref.start_frame
|
||||
and src_frame_start < media_ref.start_frame
|
||||
and start.to_frames() < media_ref.start_frame
|
||||
):
|
||||
available_range = otio.opentime.TimeRange(
|
||||
otio.opentime.RationalTime(0, rate=self.actual_fps),
|
||||
|
|
@ -209,13 +208,9 @@ class ExtractOTIOReview(
|
|||
# File sequence way
|
||||
if is_sequence:
|
||||
# Remap processing range to input file sequence.
|
||||
processing_range_as_frames = (
|
||||
processing_range.start_time.to_frames(),
|
||||
processing_range.end_time_inclusive().to_frames()
|
||||
)
|
||||
first, last = remap_range_on_file_sequence(
|
||||
r_otio_cl,
|
||||
processing_range_as_frames,
|
||||
processing_range,
|
||||
)
|
||||
input_fps = processing_range.start_time.rate
|
||||
|
||||
|
|
@ -325,6 +320,9 @@ class ExtractOTIOReview(
|
|||
end = max(collection.indexes)
|
||||
|
||||
files = [f for f in collection]
|
||||
# single frame sequence
|
||||
if len(files) == 1:
|
||||
files = files[0]
|
||||
ext = collection.format("{tail}")
|
||||
representation_data.update({
|
||||
"name": ext[1:],
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ class ExtractThumbnail(pyblish.api.InstancePlugin):
|
|||
"resolve",
|
||||
"traypublisher",
|
||||
"substancepainter",
|
||||
"substancedesigner",
|
||||
"nuke",
|
||||
"aftereffects",
|
||||
"unreal",
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class ValidateCurrentSaveFile(pyblish.api.ContextPlugin):
|
|||
label = "Validate File Saved"
|
||||
order = pyblish.api.ValidatorOrder - 0.1
|
||||
hosts = ["fusion", "houdini", "max", "maya", "nuke", "substancepainter",
|
||||
"cinema4d"]
|
||||
"cinema4d", "silhouette"]
|
||||
actions = [SaveByVersionUpAction, ShowWorkfilesAction]
|
||||
|
||||
def process(self, context):
|
||||
|
|
|
|||
|
|
@ -23,6 +23,9 @@ Enabled vs Disabled logic in most of stylesheets
|
|||
font-family: "Noto Sans";
|
||||
font-weight: 450;
|
||||
outline: none;
|
||||
|
||||
/* Define icon size to fix size issues for most of DCCs */
|
||||
icon-size: 16px;
|
||||
}
|
||||
|
||||
QWidget {
|
||||
|
|
@ -1168,6 +1171,8 @@ ValidationArtistMessage QLabel {
|
|||
|
||||
#PublishLogMessage {
|
||||
font-family: "Noto Sans Mono";
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#PublishInstanceLogsLabel {
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ class ConvertorItemsGroupWidget(BaseGroupWidget):
|
|||
else:
|
||||
widget = ConvertorItemCardWidget(item, self)
|
||||
widget.selected.connect(self._on_widget_selection)
|
||||
widget.double_clicked(self.double_clicked)
|
||||
widget.double_clicked.connect(self.double_clicked)
|
||||
self._widgets_by_id[item.id] = widget
|
||||
self._content_layout.insertWidget(widget_idx, widget)
|
||||
widget_idx += 1
|
||||
|
|
|
|||
|
|
@ -1117,6 +1117,57 @@ class LogIconFrame(QtWidgets.QFrame):
|
|||
painter.end()
|
||||
|
||||
|
||||
class LogItemMessage(QtWidgets.QTextEdit):
|
||||
def __init__(self, msg, parent):
|
||||
super().__init__(parent)
|
||||
|
||||
# Set as plain text to propagate new line characters
|
||||
self.setPlainText(msg)
|
||||
|
||||
self.setObjectName("PublishLogMessage")
|
||||
self.setReadOnly(True)
|
||||
self.setFrameStyle(QtWidgets.QFrame.NoFrame)
|
||||
self.setLineWidth(0)
|
||||
self.setMidLineWidth(0)
|
||||
pal = self.palette()
|
||||
pal.setColor(QtGui.QPalette.Base, QtCore.Qt.transparent)
|
||||
self.setPalette(pal)
|
||||
self.setContentsMargins(0, 0, 0, 0)
|
||||
viewport = self.viewport()
|
||||
viewport.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
self.setTextInteractionFlags(
|
||||
QtCore.Qt.TextBrowserInteraction)
|
||||
self.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor))
|
||||
self.setLineWrapMode(QtWidgets.QTextEdit.WidgetWidth)
|
||||
self.setWordWrapMode(
|
||||
QtGui.QTextOption.WrapMode.WrapAtWordBoundaryOrAnywhere
|
||||
)
|
||||
self.setSizePolicy(
|
||||
QtWidgets.QSizePolicy.Preferred,
|
||||
QtWidgets.QSizePolicy.Maximum
|
||||
)
|
||||
document = self.document()
|
||||
document.documentLayout().documentSizeChanged.connect(
|
||||
self._adjust_minimum_size
|
||||
)
|
||||
document.setDocumentMargin(0.0)
|
||||
self._height = None
|
||||
|
||||
def _adjust_minimum_size(self, size):
|
||||
self._height = size.height() + (2 * self.frameWidth())
|
||||
self.updateGeometry()
|
||||
|
||||
def sizeHint(self):
|
||||
size = super().sizeHint()
|
||||
if self._height is not None:
|
||||
size.setHeight(self._height)
|
||||
return size
|
||||
|
||||
def minimumSizeHint(self):
|
||||
return self.sizeHint()
|
||||
|
||||
|
||||
class LogItemWidget(QtWidgets.QWidget):
|
||||
log_level_to_flag = {
|
||||
10: LOG_DEBUG_VISIBLE,
|
||||
|
|
@ -1132,12 +1183,7 @@ class LogItemWidget(QtWidgets.QWidget):
|
|||
type_flag, level_n = self._get_log_info(log)
|
||||
icon_label = LogIconFrame(
|
||||
self, log["type"], level_n, log.get("is_validation_error"))
|
||||
message_label = QtWidgets.QLabel(log["msg"].rstrip(), self)
|
||||
message_label.setObjectName("PublishLogMessage")
|
||||
message_label.setTextInteractionFlags(
|
||||
QtCore.Qt.TextBrowserInteraction)
|
||||
message_label.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor))
|
||||
message_label.setWordWrap(True)
|
||||
message_label = LogItemMessage(log["msg"].rstrip(), self)
|
||||
|
||||
main_layout = QtWidgets.QHBoxLayout(self)
|
||||
main_layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
|
@ -1290,6 +1336,7 @@ class InstanceLogsWidget(QtWidgets.QWidget):
|
|||
|
||||
label_widget = QtWidgets.QLabel(instance.label, self)
|
||||
label_widget.setObjectName("PublishInstanceLogsLabel")
|
||||
label_widget.setWordWrap(True)
|
||||
logs_grid = LogsWithIconsView(instance.logs, self)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout(self)
|
||||
|
|
@ -1329,9 +1376,11 @@ class InstancesLogsView(QtWidgets.QFrame):
|
|||
|
||||
content_wrap_widget = QtWidgets.QWidget(scroll_area)
|
||||
content_wrap_widget.setAttribute(QtCore.Qt.WA_TranslucentBackground)
|
||||
content_wrap_widget.setMinimumWidth(80)
|
||||
|
||||
content_widget = QtWidgets.QWidget(content_wrap_widget)
|
||||
content_widget.setAttribute(QtCore.Qt.WA_TranslucentBackground)
|
||||
|
||||
content_layout = QtWidgets.QVBoxLayout(content_widget)
|
||||
content_layout.setContentsMargins(8, 8, 8, 8)
|
||||
content_layout.setSpacing(15)
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ def find_free_port(
|
|||
exclude_ports (list, tuple, set): List of ports that won't be
|
||||
checked form entered range.
|
||||
host (str): Host where will check for free ports. Set to
|
||||
"localhost" by default.
|
||||
"127.0.0.1" by default.
|
||||
"""
|
||||
if port_from is None:
|
||||
port_from = 8079
|
||||
|
|
@ -42,7 +42,7 @@ def find_free_port(
|
|||
|
||||
# Default host is localhost but it is possible to look for other hosts
|
||||
if host is None:
|
||||
host = "localhost"
|
||||
host = "127.0.0.1"
|
||||
|
||||
found_port = None
|
||||
while True:
|
||||
|
|
@ -78,7 +78,7 @@ class WebServerManager:
|
|||
self._log = None
|
||||
|
||||
self.port = port or 8079
|
||||
self.host = host or "localhost"
|
||||
self.host = host or "127.0.0.1"
|
||||
|
||||
self.on_stop_callbacks = []
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
from ayon_core.resources import get_image_path
|
||||
from ayon_core.tools.flickcharm import FlickCharm
|
||||
|
||||
from qtpy import QtWidgets, QtCore, QtGui, QtSvg
|
||||
from qtpy import QtWidgets, QtCore, QtGui
|
||||
|
||||
|
||||
class DeselectableTreeView(QtWidgets.QTreeView):
|
||||
|
|
@ -19,48 +18,6 @@ class DeselectableTreeView(QtWidgets.QTreeView):
|
|||
QtWidgets.QTreeView.mousePressEvent(self, event)
|
||||
|
||||
|
||||
class TreeViewSpinner(QtWidgets.QTreeView):
|
||||
size = 160
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super(TreeViewSpinner, self).__init__(parent=parent)
|
||||
|
||||
loading_image_path = get_image_path("spinner-200.svg")
|
||||
|
||||
self.spinner = QtSvg.QSvgRenderer(loading_image_path)
|
||||
|
||||
self.is_loading = False
|
||||
self.is_empty = True
|
||||
|
||||
def paint_loading(self, event):
|
||||
rect = event.rect()
|
||||
rect = QtCore.QRectF(rect.topLeft(), rect.bottomRight())
|
||||
rect.moveTo(
|
||||
rect.x() + rect.width() / 2 - self.size / 2,
|
||||
rect.y() + rect.height() / 2 - self.size / 2
|
||||
)
|
||||
rect.setSize(QtCore.QSizeF(self.size, self.size))
|
||||
painter = QtGui.QPainter(self.viewport())
|
||||
self.spinner.render(painter, rect)
|
||||
|
||||
def paint_empty(self, event):
|
||||
painter = QtGui.QPainter(self.viewport())
|
||||
rect = event.rect()
|
||||
rect = QtCore.QRectF(rect.topLeft(), rect.bottomRight())
|
||||
qtext_opt = QtGui.QTextOption(
|
||||
QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter
|
||||
)
|
||||
painter.drawText(rect, "No Data", qtext_opt)
|
||||
|
||||
def paintEvent(self, event):
|
||||
if self.is_loading:
|
||||
self.paint_loading(event)
|
||||
elif self.is_empty:
|
||||
self.paint_empty(event)
|
||||
else:
|
||||
super(TreeViewSpinner, self).paintEvent(event)
|
||||
|
||||
|
||||
class TreeView(QtWidgets.QTreeView):
|
||||
"""Ultimate TreeView with flick charm and double click signals.
|
||||
|
||||
|
|
|
|||
|
|
@ -184,9 +184,10 @@ class WorkareaModel:
|
|||
return items
|
||||
|
||||
for filename in os.listdir(workdir):
|
||||
# We want to support both files and folders. e.g. Silhoutte uses
|
||||
# folders as its project files. So we do not check whether it is
|
||||
# a file or not.
|
||||
filepath = os.path.join(workdir, filename)
|
||||
if not os.path.isfile(filepath):
|
||||
continue
|
||||
|
||||
ext = os.path.splitext(filename)[1].lower()
|
||||
if ext not in self._extensions:
|
||||
|
|
|
|||
|
|
@ -136,6 +136,8 @@ class FilesWidget(QtWidgets.QWidget):
|
|||
|
||||
# Initial setup
|
||||
workarea_btn_open.setEnabled(False)
|
||||
workarea_btn_browse.setEnabled(False)
|
||||
workarea_btn_save.setEnabled(False)
|
||||
published_btn_copy_n_open.setEnabled(False)
|
||||
published_btn_change_context.setEnabled(False)
|
||||
published_btn_cancel.setVisible(False)
|
||||
|
|
@ -278,8 +280,9 @@ class FilesWidget(QtWidgets.QWidget):
|
|||
self._published_btn_change_context.setEnabled(enabled)
|
||||
|
||||
def _update_workarea_btns_state(self):
|
||||
enabled = self._is_save_enabled
|
||||
enabled = self._is_save_enabled and self._valid_selected_context
|
||||
self._workarea_btn_save.setEnabled(enabled)
|
||||
self._workarea_btn_browse.setEnabled(self._valid_selected_context)
|
||||
|
||||
def _on_published_repre_changed(self, event):
|
||||
self._valid_representation_id = event["representation_id"] is not None
|
||||
|
|
@ -294,6 +297,7 @@ class FilesWidget(QtWidgets.QWidget):
|
|||
and self._selected_task_id is not None
|
||||
)
|
||||
self._update_published_btns_state()
|
||||
self._update_workarea_btns_state()
|
||||
|
||||
def _on_published_save_clicked(self):
|
||||
result = self._exec_save_as_dialog()
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@ class WorkfilesToolWindow(QtWidgets.QWidget):
|
|||
|
||||
main_layout = QtWidgets.QHBoxLayout(self)
|
||||
main_layout.addWidget(pages_widget, 1)
|
||||
main_layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
overlay_messages_widget = MessageOverlayObject(self)
|
||||
overlay_invalid_host = InvalidHostOverlay(self)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON addon 'core' version."""
|
||||
__version__ = "1.0.12+dev"
|
||||
__version__ = "1.1.0+dev"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name = "core"
|
||||
title = "Core"
|
||||
version = "1.0.12+dev"
|
||||
version = "1.1.0+dev"
|
||||
|
||||
client_dir = "ayon_core"
|
||||
|
||||
|
|
|
|||
39
poetry.lock
generated
39
poetry.lock
generated
|
|
@ -719,28 +719,29 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
|
|||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.3.7"
|
||||
version = "0.9.4"
|
||||
description = "An extremely fast Python linter and code formatter, written in Rust."
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0e8377cccb2f07abd25e84fc5b2cbe48eeb0fea9f1719cad7caedb061d70e5ce"},
|
||||
{file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:15a4d1cc1e64e556fa0d67bfd388fed416b7f3b26d5d1c3e7d192c897e39ba4b"},
|
||||
{file = "ruff-0.3.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d28bdf3d7dc71dd46929fafeec98ba89b7c3550c3f0978e36389b5631b793663"},
|
||||
{file = "ruff-0.3.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:379b67d4f49774ba679593b232dcd90d9e10f04d96e3c8ce4a28037ae473f7bb"},
|
||||
{file = "ruff-0.3.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c060aea8ad5ef21cdfbbe05475ab5104ce7827b639a78dd55383a6e9895b7c51"},
|
||||
{file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ebf8f615dde968272d70502c083ebf963b6781aacd3079081e03b32adfe4d58a"},
|
||||
{file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48098bd8f5c38897b03604f5428901b65e3c97d40b3952e38637b5404b739a2"},
|
||||
{file = "ruff-0.3.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8a4fda219bf9024692b1bc68c9cff4b80507879ada8769dc7e985755d662ea"},
|
||||
{file = "ruff-0.3.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c44e0149f1d8b48c4d5c33d88c677a4aa22fd09b1683d6a7ff55b816b5d074f"},
|
||||
{file = "ruff-0.3.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3050ec0af72b709a62ecc2aca941b9cd479a7bf2b36cc4562f0033d688e44fa1"},
|
||||
{file = "ruff-0.3.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a29cc38e4c1ab00da18a3f6777f8b50099d73326981bb7d182e54a9a21bb4ff7"},
|
||||
{file = "ruff-0.3.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b15cc59c19edca917f51b1956637db47e200b0fc5e6e1878233d3a938384b0b"},
|
||||
{file = "ruff-0.3.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e491045781b1e38b72c91247cf4634f040f8d0cb3e6d3d64d38dcf43616650b4"},
|
||||
{file = "ruff-0.3.7-py3-none-win32.whl", hash = "sha256:bc931de87593d64fad3a22e201e55ad76271f1d5bfc44e1a1887edd0903c7d9f"},
|
||||
{file = "ruff-0.3.7-py3-none-win_amd64.whl", hash = "sha256:5ef0e501e1e39f35e03c2acb1d1238c595b8bb36cf7a170e7c1df1b73da00e74"},
|
||||
{file = "ruff-0.3.7-py3-none-win_arm64.whl", hash = "sha256:789e144f6dc7019d1f92a812891c645274ed08af6037d11fc65fcbc183b7d59f"},
|
||||
{file = "ruff-0.3.7.tar.gz", hash = "sha256:d5c1aebee5162c2226784800ae031f660c350e7a3402c4d1f8ea4e97e232e3ba"},
|
||||
{file = "ruff-0.9.4-py3-none-linux_armv6l.whl", hash = "sha256:64e73d25b954f71ff100bb70f39f1ee09e880728efb4250c632ceed4e4cdf706"},
|
||||
{file = "ruff-0.9.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6ce6743ed64d9afab4fafeaea70d3631b4d4b28b592db21a5c2d1f0ef52934bf"},
|
||||
{file = "ruff-0.9.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:54499fb08408e32b57360f6f9de7157a5fec24ad79cb3f42ef2c3f3f728dfe2b"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37c892540108314a6f01f105040b5106aeb829fa5fb0561d2dcaf71485021137"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de9edf2ce4b9ddf43fd93e20ef635a900e25f622f87ed6e3047a664d0e8f810e"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87c90c32357c74f11deb7fbb065126d91771b207bf9bfaaee01277ca59b574ec"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56acd6c694da3695a7461cc55775f3a409c3815ac467279dfa126061d84b314b"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0c93e7d47ed951b9394cf352d6695b31498e68fd5782d6cbc282425655f687a"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d4c8772670aecf037d1bf7a07c39106574d143b26cfe5ed1787d2f31e800214"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfc5f1d7afeda8d5d37660eeca6d389b142d7f2b5a1ab659d9214ebd0e025231"},
|
||||
{file = "ruff-0.9.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faa935fc00ae854d8b638c16a5f1ce881bc3f67446957dd6f2af440a5fc8526b"},
|
||||
{file = "ruff-0.9.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a6c634fc6f5a0ceae1ab3e13c58183978185d131a29c425e4eaa9f40afe1e6d6"},
|
||||
{file = "ruff-0.9.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:433dedf6ddfdec7f1ac7575ec1eb9844fa60c4c8c2f8887a070672b8d353d34c"},
|
||||
{file = "ruff-0.9.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d612dbd0f3a919a8cc1d12037168bfa536862066808960e0cc901404b77968f0"},
|
||||
{file = "ruff-0.9.4-py3-none-win32.whl", hash = "sha256:db1192ddda2200671f9ef61d9597fcef89d934f5d1705e571a93a67fb13a4402"},
|
||||
{file = "ruff-0.9.4-py3-none-win_amd64.whl", hash = "sha256:05bebf4cdbe3ef75430d26c375773978950bbf4ee3c95ccb5448940dc092408e"},
|
||||
{file = "ruff-0.9.4-py3-none-win_arm64.whl", hash = "sha256:585792f1e81509e38ac5123492f8875fbc36f3ede8185af0a26df348e5154f41"},
|
||||
{file = "ruff-0.9.4.tar.gz", hash = "sha256:6907ee3529244bb0ed066683e075f09285b38dd5b4039370df6ff06041ca19e7"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -857,4 +858,4 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess
|
|||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = ">=3.9.1,<3.10"
|
||||
content-hash = "5fb5a45697502e537b9f6cf618d744a4cece4803ef65f6315186e83d1cd90f3a"
|
||||
content-hash = "1b63a1723ed91520787257791fe7d9b55557e5e12b5c41661a83f1911bc42675"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
[tool.poetry]
|
||||
name = "ayon-core"
|
||||
version = "1.0.12+dev"
|
||||
version = "1.1.0+dev"
|
||||
description = ""
|
||||
authors = ["Ynput Team <team@ynput.io>"]
|
||||
readme = "README.md"
|
||||
|
|
@ -25,7 +25,7 @@ pytest = "^8.0"
|
|||
pytest-print = "^1.0"
|
||||
ayon-python-api = "^1.0"
|
||||
# linting dependencies
|
||||
ruff = "^0.3.3"
|
||||
ruff = "^0.9.3"
|
||||
pre-commit = "^4"
|
||||
codespell = "^2.2.6"
|
||||
semver = "^3.0.2"
|
||||
|
|
@ -79,8 +79,7 @@ pydocstyle.convention = "google"
|
|||
select = ["ALL"]
|
||||
ignore = [
|
||||
"PTH",
|
||||
"ANN101",
|
||||
"ANN102",
|
||||
"ANN101", # must be set in older version of ruff
|
||||
"ANN204",
|
||||
"COM812",
|
||||
"S603",
|
||||
|
|
@ -90,7 +89,9 @@ ignore = [
|
|||
"UP007", # ..^
|
||||
"UP035", # ..
|
||||
"ARG002",
|
||||
"INP001" # add `__init__.py` to namespaced package
|
||||
"INP001", # add `__init__.py` to namespaced package
|
||||
"FIX002", # FIX all TODOs
|
||||
"TD003", # missing issue link
|
||||
]
|
||||
|
||||
# Allow fix for all enabled rules (when `--fix`) is provided.
|
||||
|
|
|
|||
|
|
@ -1008,8 +1008,8 @@ DEFAULT_PUBLISH_VALUES = {
|
|||
{"name": "model", "order": 100},
|
||||
{"name": "assembly", "order": 150},
|
||||
{"name": "groom", "order": 175},
|
||||
{"name": "look", "order": 300},
|
||||
{"name": "rig", "order": 100},
|
||||
{"name": "look", "order": 200},
|
||||
{"name": "rig", "order": 300},
|
||||
# Shot layers
|
||||
{"name": "layout", "order": 200},
|
||||
{"name": "animation", "order": 300},
|
||||
|
|
@ -1033,7 +1033,8 @@ DEFAULT_PUBLISH_VALUES = {
|
|||
"maya",
|
||||
"nuke",
|
||||
"photoshop",
|
||||
"substancepainter"
|
||||
"substancepainter",
|
||||
"silhouette",
|
||||
],
|
||||
"enabled": True,
|
||||
"optional": False,
|
||||
|
|
@ -1053,7 +1054,8 @@ DEFAULT_PUBLISH_VALUES = {
|
|||
"harmony",
|
||||
"photoshop",
|
||||
"aftereffects",
|
||||
"fusion"
|
||||
"fusion",
|
||||
"silhouette",
|
||||
],
|
||||
"enabled": True,
|
||||
"optional": True,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976,
|
||||
"value": 108.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976,
|
||||
"value": 883159.0
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"markers": [],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 755.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 883750.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "/mnt/jobs/yahoo_theDog_1132/IN/FOOTAGE/SCANS_LINEAR/Panasonic Rec 709 to ACESCG/Panasonic P2 /A001_S001_S001_T004/",
|
||||
"name_prefix": "A001_S001_S001_T004.",
|
||||
"name_suffix": ".exr",
|
||||
"start_frame": 883750,
|
||||
"frame_step": 1,
|
||||
"rate": 1.0,
|
||||
"frame_zero_padding": 0,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "sh010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 11.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 909986.0387191772
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "LinearTimeWarp.1",
|
||||
"metadata": {},
|
||||
"name": "Speed",
|
||||
"effect_name": "LinearTimeWarp",
|
||||
"time_scalar": 2.0
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/hiero_retime_2x/sh010\", \"task\": null, \"clip_index\": \"37BA620A-6580-A543-ADF3-5A7133F41BB6\", \"hierarchy\": \"shots/hiero_retime_2x\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_retime_2x\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_retime_2x\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_retime_2x\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"c60086c3-9ec3-448a-9bc5-6aa9f6af0fd5\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"label\": \"/shots/hiero_retime_2x/sh010 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"8cdde735-d5a7-4f95-9cff-ded20ff21135\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1012, \"clipIn\": 0, \"clipOut\": 10, \"clipDuration\": 11, \"sourceIn\": 176.0, \"sourceOut\": 196.0, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/hiero_retime_2x/sh010\", \"task\": null, \"clip_index\": \"37BA620A-6580-A543-ADF3-5A7133F41BB6\", \"hierarchy\": \"shots/hiero_retime_2x\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_retime_2x\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_retime_2x\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_retime_2x\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"c60086c3-9ec3-448a-9bc5-6aa9f6af0fd5\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"parent_instance_id\": \"8cdde735-d5a7-4f95-9cff-ded20ff21135\", \"label\": \"/shots/hiero_retime_2x/sh010 plateVideo_1\", \"newHierarchyIntegration\": true, \"instance_id\": \"064a92fc-5704-4316-8cc9-780e430ae2e5\", \"creator_attributes\": {\"parentInstance\": \"/shots/hiero_retime_2x/sh010 shotMain\", \"review\": true, \"reviewableSource\": \"Video 1\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"37BA620A-6580-A543-ADF3-5A7133F41BB6\"}",
|
||||
"label": "AYONdata_3c3f54af",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_3c3f54af",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "ACES - ACES2065-1",
|
||||
"ayon.source.height": 720,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1280,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "default",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "ACES - ACES2065-1",
|
||||
"foundry.source.duration": "301",
|
||||
"foundry.source.filename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "301",
|
||||
"foundry.source.framerate": "25",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "720",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.%07d.exr 948674-948974",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float16) Open Color IO space: 11",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shortfilename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "948674",
|
||||
"foundry.source.timecode": "948674",
|
||||
"foundry.source.umid": "28c4702f-5af7-4980-52c9-6eb875968890",
|
||||
"foundry.source.umidOriginator": "foundry.source.umid",
|
||||
"foundry.source.width": "1280",
|
||||
"foundry.timeline.autodiskcachemode": "Manual",
|
||||
"foundry.timeline.colorSpace": "ACES - ACES2065-1",
|
||||
"foundry.timeline.duration": "301",
|
||||
"foundry.timeline.framerate": "25",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.readParams": "AAAAAQAAAAAAAAAFAAAACmNvbG9yc3BhY2UAAAAFaW50MzIAAAAAAAAAC2VkZ2VfcGl4ZWxzAAAABWludDMyAAAAAAAAABFpZ25vcmVfcGFydF9uYW1lcwAAAARib29sAAAAAAhub3ByZWZpeAAAAARib29sAAAAAB5vZmZzZXRfbmVnYXRpdmVfZGlzcGxheV93aW5kb3cAAAAEYm9vbAE=",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"isSequence": true,
|
||||
"media.exr.channels": "B:{1 0 1 1},G:{1 0 1 1},R:{1 0 1 1}",
|
||||
"media.exr.compression": "2",
|
||||
"media.exr.compressionName": "Zip (1 scanline)",
|
||||
"media.exr.dataWindow": "1,1,1278,718",
|
||||
"media.exr.displayWindow": "0,0,1279,719",
|
||||
"media.exr.lineOrder": "0",
|
||||
"media.exr.pixelAspectRatio": "1",
|
||||
"media.exr.screenWindowCenter": "0,0",
|
||||
"media.exr.screenWindowWidth": "1",
|
||||
"media.exr.type": "scanlineimage",
|
||||
"media.exr.version": "1",
|
||||
"media.input.bitsperchannel": "16-bit half float",
|
||||
"media.input.ctime": "2025-01-13 14:26:25",
|
||||
"media.input.filename": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.0948674.exr",
|
||||
"media.input.filereader": "exr",
|
||||
"media.input.filesize": "214941",
|
||||
"media.input.frame": "1",
|
||||
"media.input.height": "720",
|
||||
"media.input.mtime": "2025-01-13 14:26:25",
|
||||
"media.input.width": "1280",
|
||||
"media.nuke.full_layer_names": "0",
|
||||
"media.nuke.node_hash": "b13e3153b31d8f14",
|
||||
"media.nuke.version": "15.0v5",
|
||||
"padding": 7
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 301.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 948674.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange\\",
|
||||
"name_prefix": "output.",
|
||||
"name_suffix": ".exr",
|
||||
"start_frame": 948674,
|
||||
"frame_step": 1,
|
||||
"rate": 25.0,
|
||||
"frame_zero_padding": 7,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,369 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {}
|
||||
},
|
||||
"name": "output.[1001-1099].tif",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 11.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 39.0
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "LinearTimeWarp.1",
|
||||
"metadata": {},
|
||||
"name": "",
|
||||
"effect_name": "",
|
||||
"time_scalar": 2.0
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Transform",
|
||||
"Enabled": true,
|
||||
"Name": "Transform",
|
||||
"Parameters": [],
|
||||
"Type": 2
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Cropping",
|
||||
"Enabled": true,
|
||||
"Name": "Cropping",
|
||||
"Parameters": [],
|
||||
"Type": 3
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Dynamic Zoom",
|
||||
"Enabled": false,
|
||||
"Name": "Dynamic Zoom",
|
||||
"Parameters": [
|
||||
{
|
||||
"Default Parameter Value": [
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Key Frames": {
|
||||
"-19": {
|
||||
"Value": [
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Variant Type": "POINTF"
|
||||
},
|
||||
"981": {
|
||||
"Value": [
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Variant Type": "POINTF"
|
||||
}
|
||||
},
|
||||
"Parameter ID": "dynamicZoomCenter",
|
||||
"Parameter Value": [
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Variant Type": "POINTF"
|
||||
},
|
||||
{
|
||||
"Default Parameter Value": 1.0,
|
||||
"Key Frames": {
|
||||
"-19": {
|
||||
"Value": 0.8,
|
||||
"Variant Type": "Double"
|
||||
},
|
||||
"981": {
|
||||
"Value": 1.0,
|
||||
"Variant Type": "Double"
|
||||
}
|
||||
},
|
||||
"Parameter ID": "dynamicZoomScale",
|
||||
"Parameter Value": 1.0,
|
||||
"Variant Type": "Double",
|
||||
"maxValue": 100.0,
|
||||
"minValue": 0.01
|
||||
}
|
||||
],
|
||||
"Type": 59
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Composite",
|
||||
"Enabled": true,
|
||||
"Name": "Composite",
|
||||
"Parameters": [],
|
||||
"Type": 1
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Lens Correction",
|
||||
"Enabled": true,
|
||||
"Name": "Lens Correction",
|
||||
"Parameters": [],
|
||||
"Type": 43
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Retime and Scaling",
|
||||
"Enabled": true,
|
||||
"Name": "Retime and Scaling",
|
||||
"Parameters": [],
|
||||
"Type": 22
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Video Faders",
|
||||
"Enabled": true,
|
||||
"Name": "Video Faders",
|
||||
"Parameters": [],
|
||||
"Type": 36
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Keywords": [],
|
||||
"Note": "{\"resolve_sub_products\": {\"io.ayon.creators.resolve.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.resolve.shot\", \"variant\": \"Main\", \"folderPath\": \"/shots/resolve_2x/sh010\", \"task\": null, \"clip_variant\": \"<track_name>\", \"clip_index\": \"51983d2a-8a54-45fc-b17d-b837bdcb2545\", \"clip_source_resolution\": {\"width\": \"1920\", \"height\": \"1080\", \"pixelAspect\": 1.0}, \"folder\": \"/shots/resolve_2x/sh010\", \"episode\": \"ep01\", \"sequence\": \"resolve_2x\", \"track\": \"{_track_}\", \"shot\": \"sh###\", \"hierarchy\": \"shots/resolve_2x\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"folder_type\": \"sequence\", \"entity_name\": \"resolve_2x\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"resolve_2x\", \"track\": \"Video_1\", \"shot\": \"sh010\"}, \"heroTrack\": true, \"uuid\": \"04cd97b0-7e6e-4f58-b8b1-5f1956d53bfb\", \"reviewTrack\": \"Video 1\", \"label\": \"/shots/resolve_2x/sh010 shot\", \"has_promised_context\": true, \"newHierarchyIntegration\": true, \"newAssetPublishing\": true, \"instance_id\": \"cc8b970c-69c1-4eab-b94f-ae41358a80ba\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1012, \"clipIn\": 86400, \"clipOut\": 86411, \"clipDuration\": 11, \"sourceIn\": 19, \"sourceOut\": 30, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.resolve.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.resolve.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/resolve_2x/sh010\", \"task\": null, \"clip_variant\": \"<track_name>\", \"clip_index\": \"51983d2a-8a54-45fc-b17d-b837bdcb2545\", \"clip_source_resolution\": {\"width\": \"1920\", \"height\": \"1080\", \"pixelAspect\": 1.0}, \"folder\": \"/shots/resolve_2x/sh010\", \"episode\": \"ep01\", \"sequence\": \"resolve_2x\", \"track\": \"{_track_}\", \"shot\": \"sh###\", \"hierarchy\": \"shots/resolve_2x\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"folder_type\": \"sequence\", \"entity_name\": \"resolve_2x\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"resolve_2x\", \"track\": \"Video_1\", \"shot\": \"sh010\"}, \"heroTrack\": true, \"uuid\": \"04cd97b0-7e6e-4f58-b8b1-5f1956d53bfb\", \"reviewTrack\": \"Video 1\", \"parent_instance_id\": \"cc8b970c-69c1-4eab-b94f-ae41358a80ba\", \"label\": \"/shots/resolve_2x/sh010 plate\", \"has_promised_context\": true, \"newHierarchyIntegration\": true, \"newAssetPublishing\": true, \"instance_id\": \"564ef731-c518-4c8f-918d-b27d0c35856c\", \"creator_attributes\": {\"parentInstance\": \"/shots/resolve_2x/sh010 shot\", \"vSyncOn\": false, \"vSyncTrack\": \"Video 1\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"51983d2a-8a54-45fc-b17d-b837bdcb2545\", \"publish\": true}"
|
||||
},
|
||||
"clip_index": "51983d2a-8a54-45fc-b17d-b837bdcb2545",
|
||||
"publish": true,
|
||||
"resolve_sub_products": {
|
||||
"io.ayon.creators.resolve.plate": {
|
||||
"active": true,
|
||||
"clip_index": "51983d2a-8a54-45fc-b17d-b837bdcb2545",
|
||||
"clip_source_resolution": {
|
||||
"height": "1080",
|
||||
"pixelAspect": 1.0,
|
||||
"width": "1920"
|
||||
},
|
||||
"clip_variant": "<track_name>",
|
||||
"creator_attributes": {
|
||||
"parentInstance": "/shots/resolve_2x/sh010 shot",
|
||||
"vSyncOn": false,
|
||||
"vSyncTrack": "Video 1"
|
||||
},
|
||||
"creator_identifier": "io.ayon.creators.resolve.plate",
|
||||
"episode": "ep01",
|
||||
"folder": "/shots/resolve_2x/sh010",
|
||||
"folderPath": "/shots/resolve_2x/sh010",
|
||||
"handleEnd": 10,
|
||||
"handleStart": 10,
|
||||
"has_promised_context": true,
|
||||
"heroTrack": true,
|
||||
"hierarchy": "shots/resolve_2x",
|
||||
"hierarchyData": {
|
||||
"episode": "ep01",
|
||||
"folder": "shots",
|
||||
"sequence": "resolve_2x",
|
||||
"shot": "sh010",
|
||||
"track": "Video_1"
|
||||
},
|
||||
"id": "pyblish.avalon.instance",
|
||||
"instance_id": "564ef731-c518-4c8f-918d-b27d0c35856c",
|
||||
"label": "/shots/resolve_2x/sh010 plate",
|
||||
"newAssetPublishing": true,
|
||||
"newHierarchyIntegration": true,
|
||||
"parent_instance_id": "cc8b970c-69c1-4eab-b94f-ae41358a80ba",
|
||||
"parents": [
|
||||
{
|
||||
"entity_name": "shots",
|
||||
"folder_type": "folder"
|
||||
},
|
||||
{
|
||||
"entity_name": "resolve_2x",
|
||||
"folder_type": "sequence"
|
||||
}
|
||||
],
|
||||
"productName": "plateVideo_1",
|
||||
"productType": "plate",
|
||||
"publish_attributes": {
|
||||
"CollectSlackFamilies": {
|
||||
"additional_message": ""
|
||||
}
|
||||
},
|
||||
"reviewTrack": "Video 1",
|
||||
"sequence": "resolve_2x",
|
||||
"shot": "sh###",
|
||||
"sourceResolution": false,
|
||||
"task": null,
|
||||
"track": "{_track_}",
|
||||
"uuid": "04cd97b0-7e6e-4f58-b8b1-5f1956d53bfb",
|
||||
"variant": "Video_1",
|
||||
"workfileFrameStart": 1001
|
||||
},
|
||||
"io.ayon.creators.resolve.shot": {
|
||||
"active": true,
|
||||
"clip_index": "51983d2a-8a54-45fc-b17d-b837bdcb2545",
|
||||
"clip_source_resolution": {
|
||||
"height": "1080",
|
||||
"pixelAspect": 1.0,
|
||||
"width": "1920"
|
||||
},
|
||||
"clip_variant": "<track_name>",
|
||||
"creator_attributes": {
|
||||
"clipDuration": 11,
|
||||
"clipIn": 86400,
|
||||
"clipOut": 86411,
|
||||
"fps": "from_selection",
|
||||
"frameEnd": 1012,
|
||||
"frameStart": 1001,
|
||||
"handleEnd": 10,
|
||||
"handleStart": 10,
|
||||
"sourceIn": 19,
|
||||
"sourceOut": 30,
|
||||
"workfileFrameStart": 1001
|
||||
},
|
||||
"creator_identifier": "io.ayon.creators.resolve.shot",
|
||||
"episode": "ep01",
|
||||
"folder": "/shots/resolve_2x/sh010",
|
||||
"folderPath": "/shots/resolve_2x/sh010",
|
||||
"handleEnd": 10,
|
||||
"handleStart": 10,
|
||||
"has_promised_context": true,
|
||||
"heroTrack": true,
|
||||
"hierarchy": "shots/resolve_2x",
|
||||
"hierarchyData": {
|
||||
"episode": "ep01",
|
||||
"folder": "shots",
|
||||
"sequence": "resolve_2x",
|
||||
"shot": "sh010",
|
||||
"track": "Video_1"
|
||||
},
|
||||
"id": "pyblish.avalon.instance",
|
||||
"instance_id": "cc8b970c-69c1-4eab-b94f-ae41358a80ba",
|
||||
"label": "/shots/resolve_2x/sh010 shot",
|
||||
"newAssetPublishing": true,
|
||||
"newHierarchyIntegration": true,
|
||||
"parents": [
|
||||
{
|
||||
"entity_name": "shots",
|
||||
"folder_type": "folder"
|
||||
},
|
||||
{
|
||||
"entity_name": "resolve_2x",
|
||||
"folder_type": "sequence"
|
||||
}
|
||||
],
|
||||
"productName": "shotMain",
|
||||
"productType": "shot",
|
||||
"publish_attributes": {
|
||||
"CollectSlackFamilies": {
|
||||
"additional_message": ""
|
||||
}
|
||||
},
|
||||
"reviewTrack": "Video 1",
|
||||
"sequence": "resolve_2x",
|
||||
"shot": "sh###",
|
||||
"sourceResolution": false,
|
||||
"task": null,
|
||||
"track": "{_track_}",
|
||||
"uuid": "04cd97b0-7e6e-4f58-b8b1-5f1956d53bfb",
|
||||
"variant": "Main",
|
||||
"workfileFrameStart": 1001
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "AYONData",
|
||||
"color": "GREEN",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 1.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 24.0
|
||||
}
|
||||
},
|
||||
"comment": ""
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {},
|
||||
"name": "output.[1001-1099].tif",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 99.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "C:\\Users\\robin\\OneDrive\\Bureau\\dev_ayon\\data\\img_sequence\\tif",
|
||||
"name_prefix": "output.",
|
||||
"name_suffix": ".tif",
|
||||
"start_frame": 1001,
|
||||
"frame_step": 1,
|
||||
"rate": 24.0,
|
||||
"frame_zero_padding": 4,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "sh010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 11.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 909986.0387191772
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "LinearTimeWarp.1",
|
||||
"metadata": {},
|
||||
"name": "Speed",
|
||||
"effect_name": "LinearTimeWarp",
|
||||
"time_scalar": 2.0
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "TimeEffect.1",
|
||||
"metadata": {
|
||||
"length": 4.0,
|
||||
"lookup": [
|
||||
2.0,
|
||||
1.7039999923706057,
|
||||
1.431999991416931,
|
||||
1.2079999942779533,
|
||||
1.055999998092652,
|
||||
1.0,
|
||||
1.056000007629395,
|
||||
1.208000022888184,
|
||||
1.432000034332276,
|
||||
1.7040000305175766,
|
||||
2.0
|
||||
]
|
||||
},
|
||||
"name": "TimeWarp6",
|
||||
"effect_name": "TimeWarp"
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/hiero_img_seq_tw_speed/sh010\", \"task\": null, \"clip_index\": \"699C12C3-07B7-E74E-A8BC-07554560B91E\", \"hierarchy\": \"shots/hiero_img_seq_tw_speed\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_img_seq_tw_speed\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": null, \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 0, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_img_seq_tw_speed\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_img_seq_tw_speed\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"731977d8-6f06-415d-9086-b04b58a16ce3\", \"reviewTrack\": null, \"folderName\": \"sh010\", \"label\": \"/shots/hiero_img_seq_tw_speed/sh010 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"d157ce1c-3157-4a34-a8b5-14c881387239\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 0, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1012, \"clipIn\": 0, \"clipOut\": 10, \"clipDuration\": 11, \"sourceIn\": 176.0, \"sourceOut\": 196.0, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/hiero_img_seq_tw_speed/sh010\", \"task\": null, \"clip_index\": \"699C12C3-07B7-E74E-A8BC-07554560B91E\", \"hierarchy\": \"shots/hiero_img_seq_tw_speed\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_img_seq_tw_speed\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": null, \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 0, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_img_seq_tw_speed\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_img_seq_tw_speed\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"731977d8-6f06-415d-9086-b04b58a16ce3\", \"reviewTrack\": null, \"folderName\": \"sh010\", \"parent_instance_id\": \"d157ce1c-3157-4a34-a8b5-14c881387239\", \"label\": \"/shots/hiero_img_seq_tw_speed/sh010 plateVideo_1\", \"newHierarchyIntegration\": true, \"instance_id\": \"daf5d8e4-5698-4a41-90eb-05eea2992dff\", \"creator_attributes\": {\"parentInstance\": \"/shots/hiero_img_seq_tw_speed/sh010 shotMain\", \"review\": false, \"reviewableSource\": \"clip_media\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"699C12C3-07B7-E74E-A8BC-07554560B91E\"}",
|
||||
"label": "AYONdata_9f37cdbf",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_9f37cdbf",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "ACES - ACES2065-1",
|
||||
"ayon.source.height": 720,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1280,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "default",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "ACES - ACES2065-1",
|
||||
"foundry.source.duration": "301",
|
||||
"foundry.source.filename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "301",
|
||||
"foundry.source.framerate": "25",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "720",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.%07d.exr 948674-948974",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float16) Open Color IO space: 11",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shortfilename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "948674",
|
||||
"foundry.source.timecode": "948674",
|
||||
"foundry.source.umid": "28c4702f-5af7-4980-52c9-6eb875968890",
|
||||
"foundry.source.umidOriginator": "foundry.source.umid",
|
||||
"foundry.source.width": "1280",
|
||||
"foundry.timeline.autodiskcachemode": "Manual",
|
||||
"foundry.timeline.colorSpace": "ACES - ACES2065-1",
|
||||
"foundry.timeline.duration": "301",
|
||||
"foundry.timeline.framerate": "25",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.readParams": "AAAAAQAAAAAAAAAFAAAACmNvbG9yc3BhY2UAAAAFaW50MzIAAAAAAAAAC2VkZ2VfcGl4ZWxzAAAABWludDMyAAAAAAAAABFpZ25vcmVfcGFydF9uYW1lcwAAAARib29sAAAAAAhub3ByZWZpeAAAAARib29sAAAAAB5vZmZzZXRfbmVnYXRpdmVfZGlzcGxheV93aW5kb3cAAAAEYm9vbAE=",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"isSequence": true,
|
||||
"media.exr.channels": "B:{1 0 1 1},G:{1 0 1 1},R:{1 0 1 1}",
|
||||
"media.exr.compression": "2",
|
||||
"media.exr.compressionName": "Zip (1 scanline)",
|
||||
"media.exr.dataWindow": "1,1,1278,718",
|
||||
"media.exr.displayWindow": "0,0,1279,719",
|
||||
"media.exr.lineOrder": "0",
|
||||
"media.exr.pixelAspectRatio": "1",
|
||||
"media.exr.screenWindowCenter": "0,0",
|
||||
"media.exr.screenWindowWidth": "1",
|
||||
"media.exr.type": "scanlineimage",
|
||||
"media.exr.version": "1",
|
||||
"media.input.bitsperchannel": "16-bit half float",
|
||||
"media.input.ctime": "2025-01-13 14:26:25",
|
||||
"media.input.filename": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.0948674.exr",
|
||||
"media.input.filereader": "exr",
|
||||
"media.input.filesize": "214941",
|
||||
"media.input.frame": "1",
|
||||
"media.input.height": "720",
|
||||
"media.input.mtime": "2025-01-13 14:26:25",
|
||||
"media.input.width": "1280",
|
||||
"media.nuke.full_layer_names": "0",
|
||||
"media.nuke.node_hash": "b13e3153b31d8f14",
|
||||
"media.nuke.version": "15.0v5",
|
||||
"padding": 7
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 301.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 948674.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange\\",
|
||||
"name_prefix": "output.",
|
||||
"name_suffix": ".exr",
|
||||
"start_frame": 948674,
|
||||
"frame_step": 1,
|
||||
"rate": 25.0,
|
||||
"frame_zero_padding": 7,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "sh010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 5.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 909990.8339241028
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "FreezeFrame.1",
|
||||
"metadata": {},
|
||||
"name": "FreezeFrame",
|
||||
"effect_name": "FreezeFrame",
|
||||
"time_scalar": 0.0
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/hiero_freeze_frame/sh010\", \"task\": null, \"clip_index\": \"85ABEEEA-6A90-CE47-9DE2-73BAB11EE31D\", \"hierarchy\": \"shots/hiero_freeze_frame\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_freeze_frame\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_freeze_frame\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_freeze_frame\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"08ba1c0a-fc51-4275-b6c8-1cb81381b043\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"label\": \"/shots/hiero_freeze_frame/sh010 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"892de813-fc78-4d92-b25f-4ea5c4791bb8\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1006, \"clipIn\": 0, \"clipOut\": 4, \"clipDuration\": 5, \"sourceIn\": 181.0, \"sourceOut\": 181.0, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/hiero_freeze_frame/sh010\", \"task\": null, \"clip_index\": \"85ABEEEA-6A90-CE47-9DE2-73BAB11EE31D\", \"hierarchy\": \"shots/hiero_freeze_frame\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_freeze_frame\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_freeze_frame\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_freeze_frame\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"08ba1c0a-fc51-4275-b6c8-1cb81381b043\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"parent_instance_id\": \"892de813-fc78-4d92-b25f-4ea5c4791bb8\", \"label\": \"/shots/hiero_freeze_frame/sh010 plateVideo_1\", \"newHierarchyIntegration\": true, \"instance_id\": \"24eb8386-4c42-4439-ac41-17ec4efb0073\", \"creator_attributes\": {\"parentInstance\": \"/shots/hiero_freeze_frame/sh010 shotMain\", \"review\": true, \"reviewableSource\": \"Video 1\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"85ABEEEA-6A90-CE47-9DE2-73BAB11EE31D\"}",
|
||||
"label": "AYONdata_a8304fcf",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_a8304fcf",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "ACES - ACES2065-1",
|
||||
"ayon.source.height": 720,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1280,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "default",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "ACES - ACES2065-1",
|
||||
"foundry.source.duration": "301",
|
||||
"foundry.source.filename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "301",
|
||||
"foundry.source.framerate": "25",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "720",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.%07d.exr 948674-948974",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float16) Open Color IO space: 11",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shortfilename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "948674",
|
||||
"foundry.source.timecode": "948674",
|
||||
"foundry.source.umid": "28c4702f-5af7-4980-52c9-6eb875968890",
|
||||
"foundry.source.umidOriginator": "foundry.source.umid",
|
||||
"foundry.source.width": "1280",
|
||||
"foundry.timeline.autodiskcachemode": "Manual",
|
||||
"foundry.timeline.colorSpace": "ACES - ACES2065-1",
|
||||
"foundry.timeline.duration": "301",
|
||||
"foundry.timeline.framerate": "25",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.readParams": "AAAAAQAAAAAAAAAFAAAACmNvbG9yc3BhY2UAAAAFaW50MzIAAAAAAAAAC2VkZ2VfcGl4ZWxzAAAABWludDMyAAAAAAAAABFpZ25vcmVfcGFydF9uYW1lcwAAAARib29sAAAAAAhub3ByZWZpeAAAAARib29sAAAAAB5vZmZzZXRfbmVnYXRpdmVfZGlzcGxheV93aW5kb3cAAAAEYm9vbAE=",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"isSequence": true,
|
||||
"media.exr.channels": "B:{1 0 1 1},G:{1 0 1 1},R:{1 0 1 1}",
|
||||
"media.exr.compression": "2",
|
||||
"media.exr.compressionName": "Zip (1 scanline)",
|
||||
"media.exr.dataWindow": "1,1,1278,718",
|
||||
"media.exr.displayWindow": "0,0,1279,719",
|
||||
"media.exr.lineOrder": "0",
|
||||
"media.exr.pixelAspectRatio": "1",
|
||||
"media.exr.screenWindowCenter": "0,0",
|
||||
"media.exr.screenWindowWidth": "1",
|
||||
"media.exr.type": "scanlineimage",
|
||||
"media.exr.version": "1",
|
||||
"media.input.bitsperchannel": "16-bit half float",
|
||||
"media.input.ctime": "2025-01-13 14:26:25",
|
||||
"media.input.filename": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.0948674.exr",
|
||||
"media.input.filereader": "exr",
|
||||
"media.input.filesize": "214941",
|
||||
"media.input.frame": "1",
|
||||
"media.input.height": "720",
|
||||
"media.input.mtime": "2025-01-13 14:26:25",
|
||||
"media.input.width": "1280",
|
||||
"media.nuke.full_layer_names": "0",
|
||||
"media.nuke.node_hash": "b13e3153b31d8f14",
|
||||
"media.nuke.version": "15.0v5",
|
||||
"padding": 7
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 301.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 948674.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange\\",
|
||||
"name_prefix": "output.",
|
||||
"name_suffix": ".exr",
|
||||
"start_frame": 948674,
|
||||
"frame_step": 1,
|
||||
"rate": 25.0,
|
||||
"frame_zero_padding": 7,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,216 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "sh010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 11.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 909986.0387191772
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "TimeEffect.1",
|
||||
"metadata": {
|
||||
"length": 1.0,
|
||||
"lookup": [
|
||||
-5.0,
|
||||
-3.9440000305175777,
|
||||
-2.852000034332275,
|
||||
-1.6880000228881844,
|
||||
-0.4160000076293944,
|
||||
1.0,
|
||||
2.5839999923706056,
|
||||
4.311999977111817,
|
||||
6.147999965667726,
|
||||
8.055999969482421,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"name": "TimeWarp3",
|
||||
"effect_name": "TimeWarp"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "TimeEffect.1",
|
||||
"metadata": {
|
||||
"length": 1.0,
|
||||
"lookup": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"name": "TimeWarp4",
|
||||
"effect_name": "TimeWarp"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "TimeEffect.1",
|
||||
"metadata": {
|
||||
"length": 1.0,
|
||||
"lookup": [
|
||||
0.0,
|
||||
-1.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-1.0
|
||||
]
|
||||
},
|
||||
"name": "TimeWarp5",
|
||||
"effect_name": "TimeWarp"
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/hiero_seq_max_tw/sh010\", \"task\": null, \"clip_index\": \"4C055A68-8354-474A-A6F8-B0CBF9A537CD\", \"hierarchy\": \"shots/hiero_seq_max_tw\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_max_tw\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": null, \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_seq_max_tw\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_max_tw\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"5e82a346-17c4-4ccb-a795-35e1a809b243\", \"reviewTrack\": null, \"folderName\": \"sh010\", \"label\": \"/shots/hiero_seq_max_tw/sh010 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"9cb2a119-8aa6-487e-a46b-9b9ff25323be\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1012, \"clipIn\": 0, \"clipOut\": 10, \"clipDuration\": 11, \"sourceIn\": 176.0, \"sourceOut\": 186.0, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/hiero_seq_max_tw/sh010\", \"task\": null, \"clip_index\": \"4C055A68-8354-474A-A6F8-B0CBF9A537CD\", \"hierarchy\": \"shots/hiero_seq_max_tw\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_max_tw\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": null, \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_seq_max_tw\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_max_tw\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"5e82a346-17c4-4ccb-a795-35e1a809b243\", \"reviewTrack\": null, \"folderName\": \"sh010\", \"parent_instance_id\": \"9cb2a119-8aa6-487e-a46b-9b9ff25323be\", \"label\": \"/shots/hiero_seq_max_tw/sh010 plateVideo_1\", \"newHierarchyIntegration\": true, \"instance_id\": \"771e41ed-74b0-4fcc-882c-6a248d45a464\", \"creator_attributes\": {\"parentInstance\": \"/shots/hiero_seq_max_tw/sh010 shotMain\", \"review\": false, \"reviewableSource\": \"clip_media\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"4C055A68-8354-474A-A6F8-B0CBF9A537CD\"}",
|
||||
"label": "AYONdata_b6896763",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_b6896763",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "ACES - ACES2065-1",
|
||||
"ayon.source.height": 720,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1280,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "default",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "ACES - ACES2065-1",
|
||||
"foundry.source.duration": "301",
|
||||
"foundry.source.filename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "301",
|
||||
"foundry.source.framerate": "25",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "720",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.%07d.exr 948674-948974",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float16) Open Color IO space: 11",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shortfilename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "948674",
|
||||
"foundry.source.timecode": "948674",
|
||||
"foundry.source.umid": "28c4702f-5af7-4980-52c9-6eb875968890",
|
||||
"foundry.source.umidOriginator": "foundry.source.umid",
|
||||
"foundry.source.width": "1280",
|
||||
"foundry.timeline.autodiskcachemode": "Manual",
|
||||
"foundry.timeline.colorSpace": "ACES - ACES2065-1",
|
||||
"foundry.timeline.duration": "301",
|
||||
"foundry.timeline.framerate": "25",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.readParams": "AAAAAQAAAAAAAAAFAAAACmNvbG9yc3BhY2UAAAAFaW50MzIAAAAAAAAAC2VkZ2VfcGl4ZWxzAAAABWludDMyAAAAAAAAABFpZ25vcmVfcGFydF9uYW1lcwAAAARib29sAAAAAAhub3ByZWZpeAAAAARib29sAAAAAB5vZmZzZXRfbmVnYXRpdmVfZGlzcGxheV93aW5kb3cAAAAEYm9vbAE=",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"isSequence": true,
|
||||
"media.exr.channels": "B:{1 0 1 1},G:{1 0 1 1},R:{1 0 1 1}",
|
||||
"media.exr.compression": "2",
|
||||
"media.exr.compressionName": "Zip (1 scanline)",
|
||||
"media.exr.dataWindow": "1,1,1278,718",
|
||||
"media.exr.displayWindow": "0,0,1279,719",
|
||||
"media.exr.lineOrder": "0",
|
||||
"media.exr.pixelAspectRatio": "1",
|
||||
"media.exr.screenWindowCenter": "0,0",
|
||||
"media.exr.screenWindowWidth": "1",
|
||||
"media.exr.type": "scanlineimage",
|
||||
"media.exr.version": "1",
|
||||
"media.input.bitsperchannel": "16-bit half float",
|
||||
"media.input.ctime": "2025-01-13 14:26:25",
|
||||
"media.input.filename": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.0948674.exr",
|
||||
"media.input.filereader": "exr",
|
||||
"media.input.filesize": "214941",
|
||||
"media.input.frame": "1",
|
||||
"media.input.height": "720",
|
||||
"media.input.mtime": "2025-01-13 14:26:25",
|
||||
"media.input.width": "1280",
|
||||
"media.nuke.full_layer_names": "0",
|
||||
"media.nuke.node_hash": "b13e3153b31d8f14",
|
||||
"media.nuke.version": "15.0v5",
|
||||
"padding": 7
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 301.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 948674.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange\\",
|
||||
"name_prefix": "output.",
|
||||
"name_suffix": ".exr",
|
||||
"start_frame": 948674,
|
||||
"frame_step": 1,
|
||||
"rate": 25.0,
|
||||
"frame_zero_padding": 7,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,235 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "img_seq_revsh0010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 41.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 1040.0
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "LinearTimeWarp.1",
|
||||
"metadata": {},
|
||||
"name": "Speed",
|
||||
"effect_name": "LinearTimeWarp",
|
||||
"time_scalar": -0.7
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"clip_index": "e7fede03-d769-4827-a014-35b50170e914",
|
||||
"flame_sub_products": {
|
||||
"io.ayon.creators.flame.plate": {
|
||||
"active": true,
|
||||
"clipName": "{sequence}{shot}",
|
||||
"clipRename": true,
|
||||
"clipVariant": "<track_name>",
|
||||
"clip_index": "e7fede03-d769-4827-a014-35b50170e914",
|
||||
"countFrom": 10,
|
||||
"countSteps": 10,
|
||||
"creator_attributes": {
|
||||
"parentInstance": "/test_robin/img_seq_rev/img_seq_revsh0010 shot",
|
||||
"review": false,
|
||||
"reviewableSource": "clip_media"
|
||||
},
|
||||
"creator_identifier": "io.ayon.creators.flame.plate",
|
||||
"episode": "ep01",
|
||||
"export_audio": false,
|
||||
"folder": "test_robin",
|
||||
"folderName": "img_seq_revsh0010",
|
||||
"folderPath": "/test_robin/img_seq_rev/img_seq_revsh0010",
|
||||
"handleEnd": 5,
|
||||
"handleStart": 5,
|
||||
"heroTrack": true,
|
||||
"hierarchy": "test_robin/img_seq_rev",
|
||||
"hierarchyData": {
|
||||
"episode": "ep01",
|
||||
"folder": "test_robin",
|
||||
"sequence": "img_seq_rev",
|
||||
"track": "noname1"
|
||||
},
|
||||
"id": "pyblish.avalon.instance",
|
||||
"includeHandles": false,
|
||||
"instance_id": "a06107cd-49ad-48cb-a84f-67f53dfd58ef",
|
||||
"label": "/test_robin/img_seq_rev/img_seq_revsh0010 plateNoname1",
|
||||
"newAssetPublishing": true,
|
||||
"newHierarchyIntegration": true,
|
||||
"parent_instance_id": "896c2dad-03a6-4a18-97f5-ecf8f00a6180",
|
||||
"parents": [
|
||||
{
|
||||
"entity_name": "test_robin",
|
||||
"folder_type": "folder"
|
||||
},
|
||||
{
|
||||
"entity_name": "img_seq_rev",
|
||||
"folder_type": "sequence"
|
||||
}
|
||||
],
|
||||
"productName": "plateNoname1",
|
||||
"productType": "plate",
|
||||
"publish": true,
|
||||
"publish_attributes": {},
|
||||
"retimedFramerange": true,
|
||||
"retimedHandles": true,
|
||||
"reviewTrack": null,
|
||||
"reviewableSource": null,
|
||||
"segmentIndex": true,
|
||||
"sequence": "img_seq_rev",
|
||||
"shot": "sh####",
|
||||
"sourceResolution": false,
|
||||
"task": null,
|
||||
"track": "{_track_}",
|
||||
"useShotName": false,
|
||||
"use_selection": true,
|
||||
"vSyncOn": false,
|
||||
"vSyncTrack": "*",
|
||||
"variant": "noname1",
|
||||
"workfileFrameStart": 1001
|
||||
},
|
||||
"io.ayon.creators.flame.shot": {
|
||||
"active": true,
|
||||
"clipName": "{sequence}{shot}",
|
||||
"clipRename": true,
|
||||
"clipVariant": "<track_name>",
|
||||
"clip_index": "e7fede03-d769-4827-a014-35b50170e914",
|
||||
"countFrom": 10,
|
||||
"countSteps": 10,
|
||||
"creator_attributes": {
|
||||
"clipDuration": 41,
|
||||
"clipIn": 1,
|
||||
"clipOut": 41,
|
||||
"fps": "from_selection",
|
||||
"frameEnd": 1042,
|
||||
"frameStart": 1001,
|
||||
"handleEnd": 5,
|
||||
"handleStart": 5,
|
||||
"includeHandles": false,
|
||||
"retimedFramerange": true,
|
||||
"retimedHandles": true,
|
||||
"sourceIn": 1068,
|
||||
"sourceOut": 1040,
|
||||
"workfileFrameStart": 1001
|
||||
},
|
||||
"creator_identifier": "io.ayon.creators.flame.shot",
|
||||
"episode": "ep01",
|
||||
"export_audio": false,
|
||||
"folder": "test_robin",
|
||||
"folderName": "img_seq_revsh0010",
|
||||
"folderPath": "/test_robin/img_seq_rev/img_seq_revsh0010",
|
||||
"handleEnd": 5,
|
||||
"handleStart": 5,
|
||||
"heroTrack": true,
|
||||
"hierarchy": "test_robin/img_seq_rev",
|
||||
"hierarchyData": {
|
||||
"episode": "ep01",
|
||||
"folder": "test_robin",
|
||||
"sequence": "img_seq_rev",
|
||||
"track": "noname1"
|
||||
},
|
||||
"id": "pyblish.avalon.instance",
|
||||
"includeHandles": false,
|
||||
"instance_id": "896c2dad-03a6-4a18-97f5-ecf8f00a6180",
|
||||
"label": "/test_robin/img_seq_rev/img_seq_revsh0010 shot",
|
||||
"newAssetPublishing": true,
|
||||
"newHierarchyIntegration": true,
|
||||
"parents": [
|
||||
{
|
||||
"entity_name": "test_robin",
|
||||
"folder_type": "folder"
|
||||
},
|
||||
{
|
||||
"entity_name": "img_seq_rev",
|
||||
"folder_type": "sequence"
|
||||
}
|
||||
],
|
||||
"productName": "shotMain",
|
||||
"productType": "shot",
|
||||
"publish": true,
|
||||
"publish_attributes": {},
|
||||
"retimedFramerange": true,
|
||||
"retimedHandles": true,
|
||||
"reviewTrack": null,
|
||||
"reviewableSource": null,
|
||||
"segmentIndex": true,
|
||||
"sequence": "img_seq_rev",
|
||||
"shot": "sh####",
|
||||
"sourceResolution": false,
|
||||
"task": null,
|
||||
"track": "{_track_}",
|
||||
"useShotName": false,
|
||||
"use_selection": true,
|
||||
"vSyncOn": false,
|
||||
"vSyncTrack": "*",
|
||||
"variant": "main",
|
||||
"workfileFrameStart": 1001
|
||||
}
|
||||
},
|
||||
"publish": true
|
||||
},
|
||||
"name": "AYONData",
|
||||
"color": "CYAN",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 1.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 22.0
|
||||
}
|
||||
},
|
||||
"comment": ""
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.height": 1080,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1920,
|
||||
"isSequence": true,
|
||||
"padding": 4
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 101.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 1000.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "/home/ynput/CODE/testing_flame/test_data/sample_media_robin/Samples media/img_sequence/tif/",
|
||||
"name_prefix": "output.",
|
||||
"name_suffix": ".tif",
|
||||
"start_frame": 1000,
|
||||
"frame_step": 1,
|
||||
"rate": 25.0,
|
||||
"frame_zero_padding": 4,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976,
|
||||
"value": 32.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976,
|
||||
"value": 947726.0
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "LinearTimeWarp.1",
|
||||
"metadata": {},
|
||||
"name": "",
|
||||
"effect_name": "LinearTimeWarp",
|
||||
"time_scalar": -1.0
|
||||
}
|
||||
],
|
||||
"markers": [],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 7607.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 941478.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "/mnt/jobs/yahoo_theDog_1132/IN/FOOTAGE/SCANS_LINEAR/Panasonic Rec 709 to ACESCG/Panasonic P2 /A001_S001_S001_T012/",
|
||||
"name_prefix": "A001_S001_S001_T012.",
|
||||
"name_suffix": ".exr",
|
||||
"start_frame": 941478,
|
||||
"frame_step": 1,
|
||||
"rate": 24.0,
|
||||
"frame_zero_padding": 0,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,369 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {}
|
||||
},
|
||||
"name": "output.[1000-1099].tif",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 41.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 20.000000000000004
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "LinearTimeWarp.1",
|
||||
"metadata": {},
|
||||
"name": "",
|
||||
"effect_name": "",
|
||||
"time_scalar": -1.0
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Transform",
|
||||
"Enabled": true,
|
||||
"Name": "Transform",
|
||||
"Parameters": [],
|
||||
"Type": 2
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Cropping",
|
||||
"Enabled": true,
|
||||
"Name": "Cropping",
|
||||
"Parameters": [],
|
||||
"Type": 3
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Dynamic Zoom",
|
||||
"Enabled": false,
|
||||
"Name": "Dynamic Zoom",
|
||||
"Parameters": [
|
||||
{
|
||||
"Default Parameter Value": [
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Key Frames": {
|
||||
"-39": {
|
||||
"Value": [
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Variant Type": "POINTF"
|
||||
},
|
||||
"961": {
|
||||
"Value": [
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Variant Type": "POINTF"
|
||||
}
|
||||
},
|
||||
"Parameter ID": "dynamicZoomCenter",
|
||||
"Parameter Value": [
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Variant Type": "POINTF"
|
||||
},
|
||||
{
|
||||
"Default Parameter Value": 1.0,
|
||||
"Key Frames": {
|
||||
"-39": {
|
||||
"Value": 0.8,
|
||||
"Variant Type": "Double"
|
||||
},
|
||||
"961": {
|
||||
"Value": 1.0,
|
||||
"Variant Type": "Double"
|
||||
}
|
||||
},
|
||||
"Parameter ID": "dynamicZoomScale",
|
||||
"Parameter Value": 1.0,
|
||||
"Variant Type": "Double",
|
||||
"maxValue": 100.0,
|
||||
"minValue": 0.01
|
||||
}
|
||||
],
|
||||
"Type": 59
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Composite",
|
||||
"Enabled": true,
|
||||
"Name": "Composite",
|
||||
"Parameters": [],
|
||||
"Type": 1
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Lens Correction",
|
||||
"Enabled": true,
|
||||
"Name": "Lens Correction",
|
||||
"Parameters": [],
|
||||
"Type": 43
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Retime and Scaling",
|
||||
"Enabled": true,
|
||||
"Name": "Retime and Scaling",
|
||||
"Parameters": [],
|
||||
"Type": 22
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
},
|
||||
{
|
||||
"OTIO_SCHEMA": "Effect.1",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Effect Name": "Video Faders",
|
||||
"Enabled": true,
|
||||
"Name": "Video Faders",
|
||||
"Parameters": [],
|
||||
"Type": 36
|
||||
}
|
||||
},
|
||||
"name": "",
|
||||
"effect_name": "Resolve Effect"
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"Resolve_OTIO": {
|
||||
"Keywords": [],
|
||||
"Note": "{\"resolve_sub_products\": {\"io.ayon.creators.resolve.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.resolve.shot\", \"variant\": \"Main\", \"folderPath\": \"/shots/reverse_speed/sh010\", \"task\": null, \"clip_variant\": \"<track_name>\", \"clip_index\": \"2cb93726-2f27-41b0-b7f7-f48998327ce8\", \"clip_source_resolution\": {\"width\": \"1920\", \"height\": \"1080\", \"pixelAspect\": 1.0}, \"folder\": \"/shots/reverse_speed/sh010\", \"episode\": \"ep01\", \"sequence\": \"reverse_speed\", \"track\": \"{_track_}\", \"shot\": \"sh###\", \"hierarchy\": \"shots/reverse_speed\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"folder_type\": \"sequence\", \"entity_name\": \"reverse_speed\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"reverse_speed\", \"track\": \"Video_1\", \"shot\": \"sh010\"}, \"heroTrack\": true, \"uuid\": \"d08c8422-29a9-46e9-9d6d-37e2dd9f9f8b\", \"reviewTrack\": null, \"label\": \"/shots/reverse_speed/sh010 shot\", \"has_promised_context\": true, \"newHierarchyIntegration\": true, \"newAssetPublishing\": true, \"instance_id\": \"087e8c66-3ce7-41bf-a27e-3e5f7abc12fb\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1042, \"clipIn\": 86400, \"clipOut\": 86441, \"clipDuration\": 41, \"sourceIn\": 39, \"sourceOut\": 80, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.resolve.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.resolve.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/reverse_speed/sh010\", \"task\": null, \"clip_variant\": \"<track_name>\", \"clip_index\": \"2cb93726-2f27-41b0-b7f7-f48998327ce8\", \"clip_source_resolution\": {\"width\": \"1920\", \"height\": \"1080\", \"pixelAspect\": 1.0}, \"folder\": \"/shots/reverse_speed/sh010\", \"episode\": \"ep01\", \"sequence\": \"reverse_speed\", \"track\": \"{_track_}\", \"shot\": \"sh###\", \"hierarchy\": \"shots/reverse_speed\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"folder_type\": \"sequence\", \"entity_name\": \"reverse_speed\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"reverse_speed\", \"track\": \"Video_1\", \"shot\": \"sh010\"}, \"heroTrack\": true, \"uuid\": \"d08c8422-29a9-46e9-9d6d-37e2dd9f9f8b\", \"reviewTrack\": null, \"parent_instance_id\": \"087e8c66-3ce7-41bf-a27e-3e5f7abc12fb\", \"label\": \"/shots/reverse_speed/sh010 plate\", \"has_promised_context\": true, \"newHierarchyIntegration\": true, \"newAssetPublishing\": true, \"instance_id\": \"63b97e7f-834f-490d-bba5-ae0e584f4a17\", \"creator_attributes\": {\"parentInstance\": \"/shots/reverse_speed/sh010 shot\", \"vSyncOn\": false, \"vSyncTrack\": \"Video 1\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"2cb93726-2f27-41b0-b7f7-f48998327ce8\", \"publish\": true}"
|
||||
},
|
||||
"clip_index": "2cb93726-2f27-41b0-b7f7-f48998327ce8",
|
||||
"publish": true,
|
||||
"resolve_sub_products": {
|
||||
"io.ayon.creators.resolve.plate": {
|
||||
"active": true,
|
||||
"clip_index": "2cb93726-2f27-41b0-b7f7-f48998327ce8",
|
||||
"clip_source_resolution": {
|
||||
"height": "1080",
|
||||
"pixelAspect": 1.0,
|
||||
"width": "1920"
|
||||
},
|
||||
"clip_variant": "<track_name>",
|
||||
"creator_attributes": {
|
||||
"parentInstance": "/shots/reverse_speed/sh010 shot",
|
||||
"vSyncOn": false,
|
||||
"vSyncTrack": "Video 1"
|
||||
},
|
||||
"creator_identifier": "io.ayon.creators.resolve.plate",
|
||||
"episode": "ep01",
|
||||
"folder": "/shots/reverse_speed/sh010",
|
||||
"folderPath": "/shots/reverse_speed/sh010",
|
||||
"handleEnd": 10,
|
||||
"handleStart": 10,
|
||||
"has_promised_context": true,
|
||||
"heroTrack": true,
|
||||
"hierarchy": "shots/reverse_speed",
|
||||
"hierarchyData": {
|
||||
"episode": "ep01",
|
||||
"folder": "shots",
|
||||
"sequence": "reverse_speed",
|
||||
"shot": "sh010",
|
||||
"track": "Video_1"
|
||||
},
|
||||
"id": "pyblish.avalon.instance",
|
||||
"instance_id": "63b97e7f-834f-490d-bba5-ae0e584f4a17",
|
||||
"label": "/shots/reverse_speed/sh010 plate",
|
||||
"newAssetPublishing": true,
|
||||
"newHierarchyIntegration": true,
|
||||
"parent_instance_id": "087e8c66-3ce7-41bf-a27e-3e5f7abc12fb",
|
||||
"parents": [
|
||||
{
|
||||
"entity_name": "shots",
|
||||
"folder_type": "folder"
|
||||
},
|
||||
{
|
||||
"entity_name": "reverse_speed",
|
||||
"folder_type": "sequence"
|
||||
}
|
||||
],
|
||||
"productName": "plateVideo_1",
|
||||
"productType": "plate",
|
||||
"publish_attributes": {
|
||||
"CollectSlackFamilies": {
|
||||
"additional_message": ""
|
||||
}
|
||||
},
|
||||
"reviewTrack": null,
|
||||
"sequence": "reverse_speed",
|
||||
"shot": "sh###",
|
||||
"sourceResolution": false,
|
||||
"task": null,
|
||||
"track": "{_track_}",
|
||||
"uuid": "d08c8422-29a9-46e9-9d6d-37e2dd9f9f8b",
|
||||
"variant": "Video_1",
|
||||
"workfileFrameStart": 1001
|
||||
},
|
||||
"io.ayon.creators.resolve.shot": {
|
||||
"active": true,
|
||||
"clip_index": "2cb93726-2f27-41b0-b7f7-f48998327ce8",
|
||||
"clip_source_resolution": {
|
||||
"height": "1080",
|
||||
"pixelAspect": 1.0,
|
||||
"width": "1920"
|
||||
},
|
||||
"clip_variant": "<track_name>",
|
||||
"creator_attributes": {
|
||||
"clipDuration": 41,
|
||||
"clipIn": 86400,
|
||||
"clipOut": 86441,
|
||||
"fps": "from_selection",
|
||||
"frameEnd": 1042,
|
||||
"frameStart": 1001,
|
||||
"handleEnd": 10,
|
||||
"handleStart": 10,
|
||||
"sourceIn": 39,
|
||||
"sourceOut": 80,
|
||||
"workfileFrameStart": 1001
|
||||
},
|
||||
"creator_identifier": "io.ayon.creators.resolve.shot",
|
||||
"episode": "ep01",
|
||||
"folder": "/shots/reverse_speed/sh010",
|
||||
"folderPath": "/shots/reverse_speed/sh010",
|
||||
"handleEnd": 10,
|
||||
"handleStart": 10,
|
||||
"has_promised_context": true,
|
||||
"heroTrack": true,
|
||||
"hierarchy": "shots/reverse_speed",
|
||||
"hierarchyData": {
|
||||
"episode": "ep01",
|
||||
"folder": "shots",
|
||||
"sequence": "reverse_speed",
|
||||
"shot": "sh010",
|
||||
"track": "Video_1"
|
||||
},
|
||||
"id": "pyblish.avalon.instance",
|
||||
"instance_id": "087e8c66-3ce7-41bf-a27e-3e5f7abc12fb",
|
||||
"label": "/shots/reverse_speed/sh010 shot",
|
||||
"newAssetPublishing": true,
|
||||
"newHierarchyIntegration": true,
|
||||
"parents": [
|
||||
{
|
||||
"entity_name": "shots",
|
||||
"folder_type": "folder"
|
||||
},
|
||||
{
|
||||
"entity_name": "reverse_speed",
|
||||
"folder_type": "sequence"
|
||||
}
|
||||
],
|
||||
"productName": "shotMain",
|
||||
"productType": "shot",
|
||||
"publish_attributes": {
|
||||
"CollectSlackFamilies": {
|
||||
"additional_message": ""
|
||||
}
|
||||
},
|
||||
"reviewTrack": null,
|
||||
"sequence": "reverse_speed",
|
||||
"shot": "sh###",
|
||||
"sourceResolution": false,
|
||||
"task": null,
|
||||
"track": "{_track_}",
|
||||
"uuid": "d08c8422-29a9-46e9-9d6d-37e2dd9f9f8b",
|
||||
"variant": "Main",
|
||||
"workfileFrameStart": 1001
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "AYONData",
|
||||
"color": "GREEN",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 1.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 59.0
|
||||
}
|
||||
},
|
||||
"comment": ""
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {},
|
||||
"name": "output.[1000-1099].tif",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 100.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "C:\\Users\\robin\\OneDrive\\Bureau\\dev_ayon\\data\\img_sequence\\tif",
|
||||
"name_prefix": "output.",
|
||||
"name_suffix": ".tif",
|
||||
"start_frame": 1000,
|
||||
"frame_step": 1,
|
||||
"rate": 24.0,
|
||||
"frame_zero_padding": 4,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,174 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "sh010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 11.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 909986.0387191772
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "TimeEffect.1",
|
||||
"metadata": {
|
||||
"length": 1.0,
|
||||
"lookup": [
|
||||
-5.0,
|
||||
-3.9440000305175777,
|
||||
-2.852000034332275,
|
||||
-1.6880000228881844,
|
||||
-0.4160000076293944,
|
||||
1.0,
|
||||
2.5839999923706056,
|
||||
4.311999977111817,
|
||||
6.147999965667726,
|
||||
8.055999969482421,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"name": "TimeWarp3",
|
||||
"effect_name": "TimeWarp"
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/hiero_seq_max_tw/sh010\", \"task\": null, \"clip_index\": \"4C055A68-8354-474A-A6F8-B0CBF9A537CD\", \"hierarchy\": \"shots/hiero_seq_max_tw\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_max_tw\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": null, \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_seq_max_tw\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_max_tw\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"5e82a346-17c4-4ccb-a795-35e1a809b243\", \"reviewTrack\": null, \"folderName\": \"sh010\", \"label\": \"/shots/hiero_seq_max_tw/sh010 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"9cb2a119-8aa6-487e-a46b-9b9ff25323be\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1012, \"clipIn\": 0, \"clipOut\": 10, \"clipDuration\": 11, \"sourceIn\": 176.0, \"sourceOut\": 186.0, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/hiero_seq_max_tw/sh010\", \"task\": null, \"clip_index\": \"4C055A68-8354-474A-A6F8-B0CBF9A537CD\", \"hierarchy\": \"shots/hiero_seq_max_tw\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_max_tw\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": null, \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_seq_max_tw\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_max_tw\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"5e82a346-17c4-4ccb-a795-35e1a809b243\", \"reviewTrack\": null, \"folderName\": \"sh010\", \"parent_instance_id\": \"9cb2a119-8aa6-487e-a46b-9b9ff25323be\", \"label\": \"/shots/hiero_seq_max_tw/sh010 plateVideo_1\", \"newHierarchyIntegration\": true, \"instance_id\": \"771e41ed-74b0-4fcc-882c-6a248d45a464\", \"creator_attributes\": {\"parentInstance\": \"/shots/hiero_seq_max_tw/sh010 shotMain\", \"review\": false, \"reviewableSource\": \"clip_media\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"4C055A68-8354-474A-A6F8-B0CBF9A537CD\"}",
|
||||
"label": "AYONdata_b6896763",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_b6896763",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "ACES - ACES2065-1",
|
||||
"ayon.source.height": 720,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1280,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "default",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "ACES - ACES2065-1",
|
||||
"foundry.source.duration": "301",
|
||||
"foundry.source.filename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "301",
|
||||
"foundry.source.framerate": "25",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "720",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.%07d.exr 948674-948974",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float16) Open Color IO space: 11",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shortfilename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "948674",
|
||||
"foundry.source.timecode": "948674",
|
||||
"foundry.source.umid": "28c4702f-5af7-4980-52c9-6eb875968890",
|
||||
"foundry.source.umidOriginator": "foundry.source.umid",
|
||||
"foundry.source.width": "1280",
|
||||
"foundry.timeline.autodiskcachemode": "Manual",
|
||||
"foundry.timeline.colorSpace": "ACES - ACES2065-1",
|
||||
"foundry.timeline.duration": "301",
|
||||
"foundry.timeline.framerate": "25",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.readParams": "AAAAAQAAAAAAAAAFAAAACmNvbG9yc3BhY2UAAAAFaW50MzIAAAAAAAAAC2VkZ2VfcGl4ZWxzAAAABWludDMyAAAAAAAAABFpZ25vcmVfcGFydF9uYW1lcwAAAARib29sAAAAAAhub3ByZWZpeAAAAARib29sAAAAAB5vZmZzZXRfbmVnYXRpdmVfZGlzcGxheV93aW5kb3cAAAAEYm9vbAE=",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"isSequence": true,
|
||||
"media.exr.channels": "B:{1 0 1 1},G:{1 0 1 1},R:{1 0 1 1}",
|
||||
"media.exr.compression": "2",
|
||||
"media.exr.compressionName": "Zip (1 scanline)",
|
||||
"media.exr.dataWindow": "1,1,1278,718",
|
||||
"media.exr.displayWindow": "0,0,1279,719",
|
||||
"media.exr.lineOrder": "0",
|
||||
"media.exr.pixelAspectRatio": "1",
|
||||
"media.exr.screenWindowCenter": "0,0",
|
||||
"media.exr.screenWindowWidth": "1",
|
||||
"media.exr.type": "scanlineimage",
|
||||
"media.exr.version": "1",
|
||||
"media.input.bitsperchannel": "16-bit half float",
|
||||
"media.input.ctime": "2025-01-13 14:26:25",
|
||||
"media.input.filename": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.0948674.exr",
|
||||
"media.input.filereader": "exr",
|
||||
"media.input.filesize": "214941",
|
||||
"media.input.frame": "1",
|
||||
"media.input.height": "720",
|
||||
"media.input.mtime": "2025-01-13 14:26:25",
|
||||
"media.input.width": "1280",
|
||||
"media.nuke.full_layer_names": "0",
|
||||
"media.nuke.node_hash": "b13e3153b31d8f14",
|
||||
"media.nuke.version": "15.0v5",
|
||||
"padding": 7
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 301.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 948674.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange\\",
|
||||
"name_prefix": "output.",
|
||||
"name_suffix": ".exr",
|
||||
"start_frame": 948674,
|
||||
"frame_step": 1,
|
||||
"rate": 25.0,
|
||||
"frame_zero_padding": 7,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,174 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "Main088sh110",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 82.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 1937905.9905694576
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/088/Main088sh110\", \"task\": null, \"clip_index\": \"70C9FA86-76A5-A045-A004-3158FB3F27C5\", \"hierarchy\": \"shots/088\", \"folder\": \"shots\", \"episode\": \"404\", \"sequence\": \"088\", \"track\": \"Main\", \"shot\": \"sh110\", \"reviewableSource\": \"Reference\", \"sourceResolution\": false, \"workfileFrameStart\": 1009, \"handleStart\": 8, \"handleEnd\": 8, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"088\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"404\", \"sequence\": \"088\", \"track\": \"Main\"}, \"heroTrack\": true, \"uuid\": \"8b0d1db8-7094-48ba-b2cd-df0d43cfffda\", \"reviewTrack\": \"Reference\", \"review\": true, \"folderName\": \"Main088sh110\", \"label\": \"/shots/088/Main088sh110 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"f6b7f12c-f3a8-44fd-b4e4-acc63ed80bb1\", \"creator_attributes\": {\"workfileFrameStart\": 1009, \"handleStart\": 8, \"handleEnd\": 8, \"frameStart\": 1009, \"frameEnd\": 1091, \"clipIn\": 80, \"clipOut\": 161, \"clipDuration\": 82, \"sourceIn\": 8.0, \"sourceOut\": 89.0, \"fps\": \"from_selection\"}, \"publish_attributes\": {}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Main\", \"folderPath\": \"/shots/088/Main088sh110\", \"task\": null, \"clip_index\": \"70C9FA86-76A5-A045-A004-3158FB3F27C5\", \"hierarchy\": \"shots/088\", \"folder\": \"shots\", \"episode\": \"404\", \"sequence\": \"088\", \"track\": \"Main\", \"shot\": \"sh110\", \"reviewableSource\": \"Reference\", \"sourceResolution\": false, \"workfileFrameStart\": 1009, \"handleStart\": 8, \"handleEnd\": 8, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"088\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"404\", \"sequence\": \"088\", \"track\": \"Main\"}, \"heroTrack\": true, \"uuid\": \"8b0d1db8-7094-48ba-b2cd-df0d43cfffda\", \"reviewTrack\": \"Reference\", \"review\": true, \"folderName\": \"Main088sh110\", \"parent_instance_id\": \"f6b7f12c-f3a8-44fd-b4e4-acc63ed80bb1\", \"label\": \"/shots/088/Main088sh110 plateMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"64b54c11-7ab1-45ef-b156-9ed5d5552b9b\", \"creator_attributes\": {\"parentInstance\": \"/shots/088/Main088sh110 shotMain\", \"review\": true, \"reviewableSource\": \"Reference\"}, \"publish_attributes\": {}}}, \"clip_index\": \"70C9FA86-76A5-A045-A004-3158FB3F27C5\"}",
|
||||
"label": "AYONdata_6b797112",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_6b797112",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"comment": ""
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "Input - Sony - Linear - Venice S-Gamut3.Cine",
|
||||
"ayon.source.height": 2160,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 4096,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "default",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "Input - Sony - Linear - Venice S-Gamut3.Cine",
|
||||
"foundry.source.duration": "98",
|
||||
"foundry.source.filename": "409_083_0015.%04d.exr 1001-1098",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "98",
|
||||
"foundry.source.framerate": "23.98",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "2160",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "X:/prj/AYON_CIRCUIT_TEST/data/OBX_20240729_P159_DOG_409/EXR/409_083_0015/409_083_0015.%04d.exr 1001-1098",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float16) Open Color IO space: 368",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shortfilename": "409_083_0015.%04d.exr 1001-1098",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "1001",
|
||||
"foundry.source.timecode": "1937896",
|
||||
"foundry.source.umid": "4b3e13b3-e465-4df4-cb1f-257091b63815",
|
||||
"foundry.source.umidOriginator": "foundry.source.umid",
|
||||
"foundry.source.width": "4096",
|
||||
"foundry.timeline.colorSpace": "Input - Sony - Linear - Venice S-Gamut3.Cine",
|
||||
"foundry.timeline.duration": "98",
|
||||
"foundry.timeline.framerate": "23.98",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.readParams": "AAAAAQAAAAAAAAAFAAAACmNvbG9yc3BhY2UAAAAFaW50MzIAAABqAAAAC2VkZ2VfcGl4ZWxzAAAABWludDMyAAAAAAAAABFpZ25vcmVfcGFydF9uYW1lcwAAAARib29sAAAAAAhub3ByZWZpeAAAAARib29sAAAAAB5vZmZzZXRfbmVnYXRpdmVfZGlzcGxheV93aW5kb3cAAAAEYm9vbAE=",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"isSequence": true,
|
||||
"media.exr.camera_camera_type": "AXS-R7",
|
||||
"media.exr.camera_fps": "23.976",
|
||||
"media.exr.camera_id": "MPC-3610 0010762 Version6.30",
|
||||
"media.exr.camera_iso": "2500",
|
||||
"media.exr.camera_lens_type": "Unknown",
|
||||
"media.exr.camera_monitor_space": "OBX4_LUT_1_Night.cube",
|
||||
"media.exr.camera_nd_filter": "1",
|
||||
"media.exr.camera_roll_angle": "0.3",
|
||||
"media.exr.camera_shutter_angle": "180.0",
|
||||
"media.exr.camera_shutter_speed": "0.0208333",
|
||||
"media.exr.camera_shutter_type": "Speed and Angle",
|
||||
"media.exr.camera_sl_num": "00011434",
|
||||
"media.exr.camera_tilt_angle": "-7.4",
|
||||
"media.exr.camera_type": "Sony",
|
||||
"media.exr.camera_white_kelvin": "3200",
|
||||
"media.exr.channels": "B:{1 0 1 1},G:{1 0 1 1},R:{1 0 1 1}",
|
||||
"media.exr.clip_details_codec": "F55_X-OCN_ST_4096_2160",
|
||||
"media.exr.clip_details_pixel_aspect_ratio": "1",
|
||||
"media.exr.clip_details_shot_frame_rate": "23.98p",
|
||||
"media.exr.compression": "0",
|
||||
"media.exr.compressionName": "none",
|
||||
"media.exr.dataWindow": "0,0,4095,2159",
|
||||
"media.exr.displayWindow": "0,0,4095,2159",
|
||||
"media.exr.lineOrder": "0",
|
||||
"media.exr.owner": "C272C010_240530HO",
|
||||
"media.exr.pixelAspectRatio": "1",
|
||||
"media.exr.screenWindowCenter": "0,0",
|
||||
"media.exr.screenWindowWidth": "1",
|
||||
"media.exr.tech_details_aspect_ratio": "1.8963",
|
||||
"media.exr.tech_details_cdl_sat": "1",
|
||||
"media.exr.tech_details_cdl_sop": "(1 1 1)(0 0 0)(1 1 1)",
|
||||
"media.exr.tech_details_gamma_space": "R709 Video",
|
||||
"media.exr.tech_details_par": "1",
|
||||
"media.exr.type": "scanlineimage",
|
||||
"media.input.bitsperchannel": "16-bit half float",
|
||||
"media.input.ctime": "2024-07-30 18:51:38",
|
||||
"media.input.filename": "X:/prj/AYON_CIRCUIT_TEST/data/OBX_20240729_P159_DOG_409/EXR/409_083_0015/409_083_0015.1001.exr",
|
||||
"media.input.filereader": "exr",
|
||||
"media.input.filesize": "53120020",
|
||||
"media.input.frame": "1",
|
||||
"media.input.frame_rate": "23.976",
|
||||
"media.input.height": "2160",
|
||||
"media.input.mtime": "2024-07-30 18:51:38",
|
||||
"media.input.timecode": "22:25:45:16",
|
||||
"media.input.width": "4096",
|
||||
"padding": 4
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976,
|
||||
"value": 98.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976,
|
||||
"value": 1937896.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "X:/prj/AYON_CIRCUIT_TEST/data/OBX_20240729_P159_DOG_409/EXR/409_083_0015\\",
|
||||
"name_prefix": "409_083_0015.",
|
||||
"name_suffix": ".exr",
|
||||
"start_frame": 1001,
|
||||
"frame_step": 1,
|
||||
"rate": 23.976,
|
||||
"frame_zero_padding": 4,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,159 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "sh010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 11.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 29.970030784606934
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "FreezeFrame.1",
|
||||
"metadata": {},
|
||||
"name": "FreezeFrame",
|
||||
"effect_name": "FreezeFrame",
|
||||
"time_scalar": 0.0
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/hiero_qt_freeze_frame/sh010\", \"task\": null, \"clip_index\": \"D812B65C-F1C7-DA48-9060-F932A50B2BB4\", \"hierarchy\": \"shots/hiero_qt_freeze_frame\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_freeze_frame\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_qt_freeze_frame\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_freeze_frame\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"e896c630-8c44-408f-a1a0-bffbe330dbe9\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"label\": \"/shots/hiero_qt_freeze_frame/sh010 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"75b9112f-6357-4235-8a74-252467d6553d\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1012, \"clipIn\": 0, \"clipOut\": 10, \"clipDuration\": 11, \"sourceIn\": 30.0, \"sourceOut\": 30.0, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/hiero_qt_freeze_frame/sh010\", \"task\": null, \"clip_index\": \"D812B65C-F1C7-DA48-9060-F932A50B2BB4\", \"hierarchy\": \"shots/hiero_qt_freeze_frame\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_freeze_frame\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_qt_freeze_frame\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_freeze_frame\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"e896c630-8c44-408f-a1a0-bffbe330dbe9\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"parent_instance_id\": \"75b9112f-6357-4235-8a74-252467d6553d\", \"label\": \"/shots/hiero_qt_freeze_frame/sh010 plateVideo_1\", \"newHierarchyIntegration\": true, \"instance_id\": \"95912bf0-aa1c-47ae-a821-fef410c32687\", \"creator_attributes\": {\"parentInstance\": \"/shots/hiero_qt_freeze_frame/sh010 shotMain\", \"review\": true, \"reviewableSource\": \"Video 1\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"D812B65C-F1C7-DA48-9060-F932A50B2BB4\"}",
|
||||
"label": "AYONdata_e681ec48",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_e681ec48",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ExternalReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "Gamma2.2",
|
||||
"ayon.source.height": 1080,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1920,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "error",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"clip.properties.ycbcrmatrix": "default (Rec 709)",
|
||||
"com.apple.quicktime.codec": "H.264",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "Gamma2.2",
|
||||
"foundry.source.duration": "101",
|
||||
"foundry.source.filename": "qt_no_tc_24fps.mov",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "1",
|
||||
"foundry.source.framerate": "24",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "1080",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/qt_no_tc_24fps.mov",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float32) Open Color IO space: 114",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shoottime": "4294967295",
|
||||
"foundry.source.shortfilename": "qt_no_tc_24fps.mov",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "0",
|
||||
"foundry.source.timecode": "0",
|
||||
"foundry.source.type": "QuickTime H.264",
|
||||
"foundry.source.umid": "16634e88-6450-4727-6c6e-501f4b31b637",
|
||||
"foundry.source.width": "1920",
|
||||
"foundry.timeline.autodiskcachemode": "Manual",
|
||||
"foundry.timeline.colorSpace": "Gamma2.2",
|
||||
"foundry.timeline.duration": "101",
|
||||
"foundry.timeline.framerate": "24",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"media.input.bitsperchannel": "8-bit fixed",
|
||||
"media.input.ctime": "2024-09-25 17:16:12",
|
||||
"media.input.filename": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/qt_no_tc_24fps.mov",
|
||||
"media.input.filereader": "mov64",
|
||||
"media.input.filesize": "14631252",
|
||||
"media.input.frame": "1",
|
||||
"media.input.frame_rate": "24",
|
||||
"media.input.height": "1080",
|
||||
"media.input.mtime": "2024-09-25 17:16:16",
|
||||
"media.input.pixel_aspect": "1",
|
||||
"media.input.timecode": "00:00:00:00",
|
||||
"media.input.width": "1920",
|
||||
"media.quicktime.codec_id": "avc1",
|
||||
"media.quicktime.codec_name": "h264",
|
||||
"media.quicktime.encoder": "H.264",
|
||||
"media.quicktime.nclc_matrix": "BT709",
|
||||
"media.quicktime.nclc_primaries": "ITU-R BT.709",
|
||||
"media.quicktime.nclc_transfer_function": "ITU-R BT.709",
|
||||
"media.quicktime.thefoundry.Application": "Nuke",
|
||||
"media.quicktime.thefoundry.ApplicationVersion": "15.0v5",
|
||||
"media.quicktime.thefoundry.Colorspace": "Gamma2.2",
|
||||
"media.quicktime.thefoundry.Writer": "mov64",
|
||||
"media.quicktime.thefoundry.YCbCrMatrix": "Rec 709",
|
||||
"media.stream.pixel_format": "yuv420p",
|
||||
"uk.co.thefoundry.Application": "Nuke",
|
||||
"uk.co.thefoundry.ApplicationVersion": "15.0v5",
|
||||
"uk.co.thefoundry.Colorspace": "Gamma2.2",
|
||||
"uk.co.thefoundry.Writer": "mov64",
|
||||
"uk.co.thefoundry.YCbCrMatrix": "Rec 709"
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 101.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/qt_no_tc_24fps.mov"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "sh010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 11.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 29.970030784606934
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "LinearTimeWarp.1",
|
||||
"metadata": {},
|
||||
"name": "Speed",
|
||||
"effect_name": "LinearTimeWarp",
|
||||
"time_scalar": -0.699999988079071
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/hiero_qt_neg07x/sh010\", \"task\": null, \"clip_index\": \"D812B65C-F1C7-DA48-9060-F932A50B2BB4\", \"hierarchy\": \"shots/hiero_qt_neg07x\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_neg07x\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"clip_media\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_qt_neg07x\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_neg07x\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"d7c96d32-6884-452f-9f8c-2383e20ca2db\", \"reviewTrack\": \"clip_media\", \"review\": true, \"folderName\": \"sh010\", \"label\": \"/shots/hiero_qt_neg07x/sh010 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"dae8823d-d664-4afd-9d9d-be20647ad756\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1012, \"clipIn\": 0, \"clipOut\": 10, \"clipDuration\": 11, \"sourceOut\": 30.0, \"fps\": \"from_selection\", \"sourceIn\": 0}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/hiero_qt_neg07x/sh010\", \"task\": null, \"clip_index\": \"D812B65C-F1C7-DA48-9060-F932A50B2BB4\", \"hierarchy\": \"shots/hiero_qt_neg07x\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_neg07x\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"clip_media\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_qt_neg07x\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_neg07x\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"d7c96d32-6884-452f-9f8c-2383e20ca2db\", \"reviewTrack\": \"clip_media\", \"review\": true, \"folderName\": \"sh010\", \"parent_instance_id\": \"dae8823d-d664-4afd-9d9d-be20647ad756\", \"label\": \"/shots/hiero_qt_neg07x/sh010 plateVideo_1\", \"newHierarchyIntegration\": true, \"instance_id\": \"a1aa49c0-49a1-4499-a3ec-1ac35982d92b\", \"creator_attributes\": {\"parentInstance\": \"/shots/hiero_qt_neg07x/sh010 shotMain\", \"review\": true, \"reviewableSource\": \"clip_media\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"D812B65C-F1C7-DA48-9060-F932A50B2BB4\"}",
|
||||
"label": "AYONdata_26480dbf",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_26480dbf",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ExternalReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "Gamma2.2",
|
||||
"ayon.source.height": 1080,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1920,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "error",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"clip.properties.ycbcrmatrix": "0",
|
||||
"com.apple.quicktime.codec": "H.264",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "Gamma2.2",
|
||||
"foundry.source.duration": "101",
|
||||
"foundry.source.filename": "qt_no_tc_24fps.mov",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "1",
|
||||
"foundry.source.framerate": "24",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "1080",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/qt_no_tc_24fps.mov",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float32) Open Color IO space: 114",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shoottime": "4294967295",
|
||||
"foundry.source.shortfilename": "qt_no_tc_24fps.mov",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "0",
|
||||
"foundry.source.timecode": "0",
|
||||
"foundry.source.type": "QuickTime H.264",
|
||||
"foundry.source.umid": "16634e88-6450-4727-6c6e-501f4b31b637",
|
||||
"foundry.source.umidOriginator": "foundry.source.umid",
|
||||
"foundry.source.width": "1920",
|
||||
"foundry.timeline.autodiskcachemode": "Manual",
|
||||
"foundry.timeline.colorSpace": "Gamma2.2",
|
||||
"foundry.timeline.duration": "101",
|
||||
"foundry.timeline.framerate": "24",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"media.input.bitsperchannel": "8-bit fixed",
|
||||
"media.input.ctime": "2024-09-25 17:16:12",
|
||||
"media.input.filename": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/qt_no_tc_24fps.mov",
|
||||
"media.input.filereader": "mov64",
|
||||
"media.input.filesize": "14631252",
|
||||
"media.input.frame": "1",
|
||||
"media.input.frame_rate": "24",
|
||||
"media.input.height": "1080",
|
||||
"media.input.mtime": "2024-09-25 17:16:16",
|
||||
"media.input.pixel_aspect": "1",
|
||||
"media.input.timecode": "00:00:00:00",
|
||||
"media.input.width": "1920",
|
||||
"media.quicktime.codec_id": "avc1",
|
||||
"media.quicktime.codec_name": "h264",
|
||||
"media.quicktime.encoder": "H.264",
|
||||
"media.quicktime.nclc_matrix": "BT709",
|
||||
"media.quicktime.nclc_primaries": "ITU-R BT.709",
|
||||
"media.quicktime.nclc_transfer_function": "ITU-R BT.709",
|
||||
"media.quicktime.thefoundry.Application": "Nuke",
|
||||
"media.quicktime.thefoundry.ApplicationVersion": "15.0v5",
|
||||
"media.quicktime.thefoundry.Colorspace": "Gamma2.2",
|
||||
"media.quicktime.thefoundry.Writer": "mov64",
|
||||
"media.quicktime.thefoundry.YCbCrMatrix": "Rec 709",
|
||||
"media.stream.pixel_format": "yuv420p",
|
||||
"uk.co.thefoundry.Application": "Nuke",
|
||||
"uk.co.thefoundry.ApplicationVersion": "15.0v5",
|
||||
"uk.co.thefoundry.Colorspace": "Gamma2.2",
|
||||
"uk.co.thefoundry.Writer": "mov64",
|
||||
"uk.co.thefoundry.YCbCrMatrix": "Rec 709"
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 101.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/qt_no_tc_24fps.mov"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "sh010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 11.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 29.970030784606934
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "LinearTimeWarp.1",
|
||||
"metadata": {},
|
||||
"name": "Speed",
|
||||
"effect_name": "LinearTimeWarp",
|
||||
"time_scalar": -2.0
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/hiero_qt_neg_2x/sh010\", \"task\": null, \"clip_index\": \"D812B65C-F1C7-DA48-9060-F932A50B2BB4\", \"hierarchy\": \"shots/hiero_qt_neg_2x\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_neg_2x\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_qt_neg_2x\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_neg_2x\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"a59e3db6-0b60-41f5-827c-9d280547bf31\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"label\": \"/shots/hiero_qt_neg_2x/sh010 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"f98ac652-ed03-4985-bad9-5b028ceeddba\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1012, \"clipIn\": 0, \"clipOut\": 10, \"clipDuration\": 11, \"sourceIn\": 50.0, \"sourceOut\": 30.0, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/hiero_qt_neg_2x/sh010\", \"task\": null, \"clip_index\": \"D812B65C-F1C7-DA48-9060-F932A50B2BB4\", \"hierarchy\": \"shots/hiero_qt_neg_2x\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_neg_2x\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_qt_neg_2x\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_qt_neg_2x\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"a59e3db6-0b60-41f5-827c-9d280547bf31\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"parent_instance_id\": \"f98ac652-ed03-4985-bad9-5b028ceeddba\", \"label\": \"/shots/hiero_qt_neg_2x/sh010 plateVideo_1\", \"newHierarchyIntegration\": true, \"instance_id\": \"5c9c047c-43fa-42a1-a00f-e9c9d6e5a3c4\", \"creator_attributes\": {\"parentInstance\": \"/shots/hiero_qt_neg_2x/sh010 shotMain\", \"review\": true, \"reviewableSource\": \"Video 1\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"D812B65C-F1C7-DA48-9060-F932A50B2BB4\"}",
|
||||
"label": "AYONdata_fd6d196e",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_fd6d196e",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ExternalReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "Gamma2.2",
|
||||
"ayon.source.height": 1080,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1920,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "error",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"clip.properties.ycbcrmatrix": "0",
|
||||
"com.apple.quicktime.codec": "H.264",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "Gamma2.2",
|
||||
"foundry.source.duration": "101",
|
||||
"foundry.source.filename": "qt_no_tc_24fps.mov",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "1",
|
||||
"foundry.source.framerate": "24",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "1080",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/qt_no_tc_24fps.mov",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float32) Open Color IO space: 114",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shoottime": "4294967295",
|
||||
"foundry.source.shortfilename": "qt_no_tc_24fps.mov",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "0",
|
||||
"foundry.source.timecode": "0",
|
||||
"foundry.source.type": "QuickTime H.264",
|
||||
"foundry.source.umid": "16634e88-6450-4727-6c6e-501f4b31b637",
|
||||
"foundry.source.umidOriginator": "foundry.source.umid",
|
||||
"foundry.source.width": "1920",
|
||||
"foundry.timeline.autodiskcachemode": "Manual",
|
||||
"foundry.timeline.colorSpace": "Gamma2.2",
|
||||
"foundry.timeline.duration": "101",
|
||||
"foundry.timeline.framerate": "24",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"media.input.bitsperchannel": "8-bit fixed",
|
||||
"media.input.ctime": "2024-09-25 17:16:12",
|
||||
"media.input.filename": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/qt_no_tc_24fps.mov",
|
||||
"media.input.filereader": "mov64",
|
||||
"media.input.filesize": "14631252",
|
||||
"media.input.frame": "1",
|
||||
"media.input.frame_rate": "24",
|
||||
"media.input.height": "1080",
|
||||
"media.input.mtime": "2024-09-25 17:16:16",
|
||||
"media.input.pixel_aspect": "1",
|
||||
"media.input.timecode": "00:00:00:00",
|
||||
"media.input.width": "1920",
|
||||
"media.quicktime.codec_id": "avc1",
|
||||
"media.quicktime.codec_name": "h264",
|
||||
"media.quicktime.encoder": "H.264",
|
||||
"media.quicktime.nclc_matrix": "BT709",
|
||||
"media.quicktime.nclc_primaries": "ITU-R BT.709",
|
||||
"media.quicktime.nclc_transfer_function": "ITU-R BT.709",
|
||||
"media.quicktime.thefoundry.Application": "Nuke",
|
||||
"media.quicktime.thefoundry.ApplicationVersion": "15.0v5",
|
||||
"media.quicktime.thefoundry.Colorspace": "Gamma2.2",
|
||||
"media.quicktime.thefoundry.Writer": "mov64",
|
||||
"media.quicktime.thefoundry.YCbCrMatrix": "Rec 709",
|
||||
"media.stream.pixel_format": "yuv420p",
|
||||
"uk.co.thefoundry.Application": "Nuke",
|
||||
"uk.co.thefoundry.ApplicationVersion": "15.0v5",
|
||||
"uk.co.thefoundry.Colorspace": "Gamma2.2",
|
||||
"uk.co.thefoundry.Writer": "mov64",
|
||||
"uk.co.thefoundry.YCbCrMatrix": "Rec 709"
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 101.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 24.0,
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/qt_no_tc_24fps.mov"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -0,0 +1,174 @@
|
|||
{
|
||||
"OTIO_SCHEMA": "Clip.2",
|
||||
"metadata": {},
|
||||
"name": "sh010",
|
||||
"source_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 11.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 909986.0387191772
|
||||
}
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"OTIO_SCHEMA": "TimeEffect.1",
|
||||
"metadata": {
|
||||
"length": 4.0,
|
||||
"lookup": [
|
||||
2.0,
|
||||
1.8959999809265136,
|
||||
1.767999971389771,
|
||||
1.59199997138977,
|
||||
1.3439999809265135,
|
||||
1.0,
|
||||
0.5440000181198119,
|
||||
-0.007999974250793684,
|
||||
-0.6319999756813051,
|
||||
-1.3039999847412114,
|
||||
-2.0
|
||||
]
|
||||
},
|
||||
"name": "TimeWarp2",
|
||||
"effect_name": "TimeWarp"
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"OTIO_SCHEMA": "Marker.2",
|
||||
"metadata": {
|
||||
"applieswhole": "1",
|
||||
"hiero_source_type": "TrackItem",
|
||||
"json_metadata": "{\"hiero_sub_products\": {\"io.ayon.creators.hiero.shot\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"shot\", \"productName\": \"shotMain\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.shot\", \"variant\": \"main\", \"folderPath\": \"/shots/hiero_seq_tw/sh010\", \"task\": null, \"clip_index\": \"27126150-EDFA-9F45-908C-59F5CD1A94E2\", \"hierarchy\": \"shots/hiero_seq_tw\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_tw\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_seq_tw\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_tw\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"5c0e0d32-fa09-4331-afbb-5b194cfa258c\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"label\": \"/shots/hiero_seq_tw/sh010 shotMain\", \"newHierarchyIntegration\": true, \"instance_id\": \"b88fe40d-f92d-42b0-b7f6-7cb7a206e878\", \"creator_attributes\": {\"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"frameStart\": 1001, \"frameEnd\": 1012, \"clipIn\": 0, \"clipOut\": 10, \"clipDuration\": 11, \"sourceIn\": 176.0, \"sourceOut\": 186.0, \"fps\": \"from_selection\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}, \"io.ayon.creators.hiero.plate\": {\"id\": \"pyblish.avalon.instance\", \"productType\": \"plate\", \"productName\": \"plateVideo_1\", \"active\": true, \"creator_identifier\": \"io.ayon.creators.hiero.plate\", \"variant\": \"Video_1\", \"folderPath\": \"/shots/hiero_seq_tw/sh010\", \"task\": null, \"clip_index\": \"27126150-EDFA-9F45-908C-59F5CD1A94E2\", \"hierarchy\": \"shots/hiero_seq_tw\", \"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_tw\", \"track\": \"Video_1\", \"shot\": \"sh010\", \"reviewableSource\": \"Video 1\", \"sourceResolution\": false, \"workfileFrameStart\": 1001, \"handleStart\": 10, \"handleEnd\": 10, \"parents\": [{\"entity_type\": \"folder\", \"folder_type\": \"folder\", \"entity_name\": \"shots\"}, {\"entity_type\": \"sequence\", \"folder_type\": \"sequence\", \"entity_name\": \"hiero_seq_tw\"}], \"hierarchyData\": {\"folder\": \"shots\", \"episode\": \"ep01\", \"sequence\": \"hiero_seq_tw\", \"track\": \"Video_1\"}, \"heroTrack\": true, \"uuid\": \"5c0e0d32-fa09-4331-afbb-5b194cfa258c\", \"reviewTrack\": \"Video 1\", \"review\": true, \"folderName\": \"sh010\", \"parent_instance_id\": \"b88fe40d-f92d-42b0-b7f6-7cb7a206e878\", \"label\": \"/shots/hiero_seq_tw/sh010 plateVideo_1\", \"newHierarchyIntegration\": true, \"instance_id\": \"e3ea1467-dfaf-48db-bf3c-6cbbbd2cd972\", \"creator_attributes\": {\"parentInstance\": \"/shots/hiero_seq_tw/sh010 shotMain\", \"review\": true, \"reviewableSource\": \"Video 1\"}, \"publish_attributes\": {\"CollectSlackFamilies\": {\"additional_message\": \"\"}}}}, \"clip_index\": \"27126150-EDFA-9F45-908C-59F5CD1A94E2\"}",
|
||||
"label": "AYONdata_ef8f52f1",
|
||||
"note": "AYON data container"
|
||||
},
|
||||
"name": "AYONdata_ef8f52f1",
|
||||
"color": "RED",
|
||||
"marked_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 23.976024627685547,
|
||||
"value": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"enabled": true,
|
||||
"media_references": {
|
||||
"DEFAULT_MEDIA": {
|
||||
"OTIO_SCHEMA": "ImageSequenceReference.1",
|
||||
"metadata": {
|
||||
"ayon.source.colorspace": "ACES - ACES2065-1",
|
||||
"ayon.source.height": 720,
|
||||
"ayon.source.pixelAspect": 1.0,
|
||||
"ayon.source.width": 1280,
|
||||
"clip.properties.blendfunc": "0",
|
||||
"clip.properties.colourspacename": "default",
|
||||
"clip.properties.domainroot": "",
|
||||
"clip.properties.enabled": "1",
|
||||
"clip.properties.expanded": "1",
|
||||
"clip.properties.opacity": "1",
|
||||
"clip.properties.valuesource": "",
|
||||
"foundry.source.audio": "",
|
||||
"foundry.source.bitmapsize": "0",
|
||||
"foundry.source.bitsperchannel": "0",
|
||||
"foundry.source.channelformat": "integer",
|
||||
"foundry.source.colourtransform": "ACES - ACES2065-1",
|
||||
"foundry.source.duration": "301",
|
||||
"foundry.source.filename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.filesize": "",
|
||||
"foundry.source.fragments": "301",
|
||||
"foundry.source.framerate": "25",
|
||||
"foundry.source.fullpath": "",
|
||||
"foundry.source.height": "720",
|
||||
"foundry.source.layers": "colour",
|
||||
"foundry.source.path": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.%07d.exr 948674-948974",
|
||||
"foundry.source.pixelAspect": "1",
|
||||
"foundry.source.pixelAspectRatio": "",
|
||||
"foundry.source.pixelformat": "RGBA (Float16) Open Color IO space: 11",
|
||||
"foundry.source.reelID": "",
|
||||
"foundry.source.resolution": "",
|
||||
"foundry.source.samplerate": "Invalid",
|
||||
"foundry.source.shortfilename": "output.%07d.exr 948674-948974",
|
||||
"foundry.source.shot": "",
|
||||
"foundry.source.shotDate": "",
|
||||
"foundry.source.startTC": "",
|
||||
"foundry.source.starttime": "948674",
|
||||
"foundry.source.timecode": "948674",
|
||||
"foundry.source.umid": "28c4702f-5af7-4980-52c9-6eb875968890",
|
||||
"foundry.source.umidOriginator": "foundry.source.umid",
|
||||
"foundry.source.width": "1280",
|
||||
"foundry.timeline.autodiskcachemode": "Manual",
|
||||
"foundry.timeline.colorSpace": "ACES - ACES2065-1",
|
||||
"foundry.timeline.duration": "301",
|
||||
"foundry.timeline.framerate": "25",
|
||||
"foundry.timeline.outputformat": "",
|
||||
"foundry.timeline.poster": "0",
|
||||
"foundry.timeline.posterLayer": "colour",
|
||||
"foundry.timeline.readParams": "AAAAAQAAAAAAAAAFAAAACmNvbG9yc3BhY2UAAAAFaW50MzIAAAAAAAAAC2VkZ2VfcGl4ZWxzAAAABWludDMyAAAAAAAAABFpZ25vcmVfcGFydF9uYW1lcwAAAARib29sAAAAAAhub3ByZWZpeAAAAARib29sAAAAAB5vZmZzZXRfbmVnYXRpdmVfZGlzcGxheV93aW5kb3cAAAAEYm9vbAE=",
|
||||
"foundry.timeline.samplerate": "Invalid",
|
||||
"isSequence": true,
|
||||
"media.exr.channels": "B:{1 0 1 1},G:{1 0 1 1},R:{1 0 1 1}",
|
||||
"media.exr.compression": "2",
|
||||
"media.exr.compressionName": "Zip (1 scanline)",
|
||||
"media.exr.dataWindow": "1,1,1278,718",
|
||||
"media.exr.displayWindow": "0,0,1279,719",
|
||||
"media.exr.lineOrder": "0",
|
||||
"media.exr.pixelAspectRatio": "1",
|
||||
"media.exr.screenWindowCenter": "0,0",
|
||||
"media.exr.screenWindowWidth": "1",
|
||||
"media.exr.type": "scanlineimage",
|
||||
"media.exr.version": "1",
|
||||
"media.input.bitsperchannel": "16-bit half float",
|
||||
"media.input.ctime": "2025-01-13 14:26:25",
|
||||
"media.input.filename": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange/output.0948674.exr",
|
||||
"media.input.filereader": "exr",
|
||||
"media.input.filesize": "214941",
|
||||
"media.input.frame": "1",
|
||||
"media.input.height": "720",
|
||||
"media.input.mtime": "2025-01-13 14:26:25",
|
||||
"media.input.width": "1280",
|
||||
"media.nuke.full_layer_names": "0",
|
||||
"media.nuke.node_hash": "b13e3153b31d8f14",
|
||||
"media.nuke.version": "15.0v5",
|
||||
"padding": 7
|
||||
},
|
||||
"name": "",
|
||||
"available_range": {
|
||||
"OTIO_SCHEMA": "TimeRange.1",
|
||||
"duration": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 301.0
|
||||
},
|
||||
"start_time": {
|
||||
"OTIO_SCHEMA": "RationalTime.1",
|
||||
"rate": 25.0,
|
||||
"value": 948674.0
|
||||
}
|
||||
},
|
||||
"available_image_bounds": null,
|
||||
"target_url_base": "C:/Users/robin/OneDrive/Bureau/dev_ayon/data/img_sequence/exr_long_frameRange\\",
|
||||
"name_prefix": "output.",
|
||||
"name_suffix": ".exr",
|
||||
"start_frame": 948674,
|
||||
"frame_step": 1,
|
||||
"rate": 25.0,
|
||||
"frame_zero_padding": 7,
|
||||
"missing_frame_policy": "error"
|
||||
}
|
||||
},
|
||||
"active_media_reference_key": "DEFAULT_MEDIA"
|
||||
}
|
||||
|
|
@ -252,48 +252,48 @@ def test_multiple_review_clips_no_gap():
|
|||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 1199 C:/result/output.%04d.jpg',
|
||||
'-start_number 1198 C:/result/output.%04d.jpg',
|
||||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 24.0 -i '
|
||||
f'C:\\with_tc{os.sep}output.%04d.exr '
|
||||
'-start_number 1300 C:/result/output.%04d.jpg',
|
||||
'-start_number 1299 C:/result/output.%04d.jpg',
|
||||
|
||||
# Repeated 25fps tiff sequence multiple times till the end
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 1397 C:/result/output.%04d.jpg',
|
||||
'-start_number 1395 C:/result/output.%04d.jpg',
|
||||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 1498 C:/result/output.%04d.jpg',
|
||||
'-start_number 1496 C:/result/output.%04d.jpg',
|
||||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 1599 C:/result/output.%04d.jpg',
|
||||
'-start_number 1597 C:/result/output.%04d.jpg',
|
||||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 1700 C:/result/output.%04d.jpg',
|
||||
'-start_number 1698 C:/result/output.%04d.jpg',
|
||||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 1801 C:/result/output.%04d.jpg',
|
||||
'-start_number 1799 C:/result/output.%04d.jpg',
|
||||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 1902 C:/result/output.%04d.jpg',
|
||||
'-start_number 1900 C:/result/output.%04d.jpg',
|
||||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 2003 C:/result/output.%04d.jpg',
|
||||
'-start_number 2001 C:/result/output.%04d.jpg',
|
||||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 2104 C:/result/output.%04d.jpg',
|
||||
'-start_number 2102 C:/result/output.%04d.jpg',
|
||||
|
||||
'/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i '
|
||||
f'C:\\no_tc{os.sep}output.%04d.tif '
|
||||
'-start_number 2205 C:/result/output.%04d.jpg'
|
||||
'-start_number 2203 C:/result/output.%04d.jpg'
|
||||
]
|
||||
|
||||
assert calls == expected
|
||||
|
|
|
|||
|
|
@ -64,6 +64,28 @@ def test_movie_embedded_tc_handle():
|
|||
)
|
||||
|
||||
|
||||
def test_movie_23fps_qt_embedded_tc():
|
||||
"""
|
||||
Movie clip (embedded timecode 1h)
|
||||
available_range = 1937896-1937994 23.976fps
|
||||
source_range = 1937905-1937987 23.97602462768554fps
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 1009,
|
||||
'mediaOut': 1090,
|
||||
'handleStart': 8,
|
||||
'handleEnd': 8,
|
||||
'speed': 1.0
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"qt_23.976_embedded_long_tc.json",
|
||||
expected_data,
|
||||
handle_start=8,
|
||||
handle_end=8,
|
||||
)
|
||||
|
||||
|
||||
def test_movie_retime_effect():
|
||||
"""
|
||||
Movie clip (embedded timecode 1h)
|
||||
|
|
@ -91,6 +113,151 @@ def test_movie_retime_effect():
|
|||
)
|
||||
|
||||
|
||||
def test_movie_reverse_speed_2x():
|
||||
"""
|
||||
Movie clip (no timecode)
|
||||
available files = 0-100 24fps
|
||||
source_range = 29.97-40.97 23.976fps
|
||||
speed = -2.0
|
||||
"""
|
||||
expected_data = {
|
||||
# not exactly 30 because of 23.976 rouding
|
||||
# https://github.com/AcademySoftwareFoundation/
|
||||
# OpenTimelineIO/issues/1822
|
||||
'mediaIn': 30.000000000000004,
|
||||
'mediaOut': 51.02199940144827,
|
||||
'handleStart': 20,
|
||||
'handleEnd': 20,
|
||||
'speed': -2.0,
|
||||
'versionData': {
|
||||
'retime': True,
|
||||
'speed': -2.0,
|
||||
'timewarps': [],
|
||||
'handleStart': 20,
|
||||
'handleEnd': 20,
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"qt_reverse_speed_2x.json",
|
||||
expected_data,
|
||||
handle_start=10,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
def test_movie_reverse_speed_0_7x():
|
||||
"""
|
||||
Movie clip (no timecode)
|
||||
available files = 0-100 24fps
|
||||
source_range = 29.97-40.97 23.976fps
|
||||
speed = -0.7
|
||||
"""
|
||||
expected_data = {
|
||||
'handleEnd': 7,
|
||||
'handleStart': 7,
|
||||
'mediaIn': 30.000000000000004,
|
||||
'mediaOut': 36.70769965924555,
|
||||
'speed': -0.699999988079071,
|
||||
'versionData': {
|
||||
'handleEnd': 7,
|
||||
'handleStart': 7,
|
||||
'retime': True,
|
||||
'speed': -0.699999988079071,
|
||||
'timewarps': []
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"qt_reverse_speed_0_7.json",
|
||||
expected_data,
|
||||
handle_start=10,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
def test_movie_frozen_frame():
|
||||
"""
|
||||
Movie clip (no timecode)
|
||||
available files = 0-100 24fps
|
||||
source_range = 29.97-40.97 23.976fps
|
||||
speed = 0.0
|
||||
"""
|
||||
expected_data = {
|
||||
# not exactly 30 because of OTIO rounding
|
||||
# https://github.com/AcademySoftwareFoundation/
|
||||
# OpenTimelineIO/issues/1822
|
||||
'mediaIn': 30.000000000000004,
|
||||
'mediaOut': 30.000000000000004,
|
||||
'handleStart': 0,
|
||||
'handleEnd': 0,
|
||||
'speed': 0.0,
|
||||
'versionData': {
|
||||
'retime': True,
|
||||
'speed': 0.0,
|
||||
'timewarps': [],
|
||||
'handleStart': 0,
|
||||
'handleEnd': 0,
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"qt_freeze_frame.json",
|
||||
expected_data,
|
||||
handle_start=10,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
def test_movie_timewarp():
|
||||
"""
|
||||
Movie clip (no timecode)
|
||||
available files = 0-100 24fps
|
||||
source_range = 29.97-40.97 23.976fps
|
||||
speed = timewarp
|
||||
"""
|
||||
expected_data = {
|
||||
'handleEnd': 10,
|
||||
'handleStart': 0,
|
||||
'mediaIn': 948852,
|
||||
'mediaOut': 948858,
|
||||
'speed': 1.0,
|
||||
'versionData': {'handleEnd': 10,
|
||||
'handleStart': 0,
|
||||
'retime': True,
|
||||
'speed': 1.0,
|
||||
'timewarps': [
|
||||
{
|
||||
'Class': 'TimeWarp',
|
||||
'length': 4.0,
|
||||
'lookup': [
|
||||
0.0,
|
||||
-0.10400001907348644,
|
||||
-0.23200002861022906,
|
||||
-0.4080000286102301,
|
||||
-0.6560000190734865,
|
||||
-1.0,
|
||||
-1.455999981880188,
|
||||
-2.0079999742507937,
|
||||
-2.631999975681305,
|
||||
-3.3039999847412114,
|
||||
-4.0
|
||||
],
|
||||
'name': 'TimeWarp2'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"qt_timewarp.json",
|
||||
expected_data,
|
||||
handle_start=0,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
|
||||
def test_img_sequence_no_handles():
|
||||
"""
|
||||
Img sequence clip (no embedded timecode)
|
||||
|
|
@ -187,3 +354,391 @@ def test_img_sequence_conform_to_23_976fps():
|
|||
handle_start=0,
|
||||
handle_end=8,
|
||||
)
|
||||
|
||||
|
||||
def test_img_sequence_conform_from_24_to_23_976fps():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 883750-884504 24fps
|
||||
source_range = 883159-883267 23.976fps
|
||||
|
||||
This test ensures such entries do not trigger
|
||||
the legacy Hiero export compatibility.
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 884043,
|
||||
'mediaOut': 884150,
|
||||
'handleStart': 0,
|
||||
'handleEnd': 0,
|
||||
'speed': 1.0
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_24_to_23.976_no_legacy.json",
|
||||
expected_data,
|
||||
handle_start=0,
|
||||
handle_end=0,
|
||||
)
|
||||
|
||||
|
||||
def test_img_sequence_reverse_speed_no_tc():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 0-100 24fps
|
||||
source_range = 20-41 24fps
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 1020,
|
||||
'mediaOut': 1060,
|
||||
'handleStart': 0,
|
||||
'handleEnd': 0,
|
||||
'speed': -1.0,
|
||||
'versionData': {
|
||||
'retime': True,
|
||||
'speed': -1.0,
|
||||
'timewarps': [],
|
||||
'handleStart': 0,
|
||||
'handleEnd': 0
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_reverse_speed_no_tc.json",
|
||||
expected_data,
|
||||
handle_start=0,
|
||||
handle_end=0,
|
||||
)
|
||||
|
||||
def test_img_sequence_reverse_speed_from_24_to_23_976fps():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 941478-949084 24fps
|
||||
source_range = 947726-947757 23.976fps
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 948674,
|
||||
'mediaOut': 948705,
|
||||
'handleStart': 10,
|
||||
'handleEnd': 10,
|
||||
'speed': -1.0,
|
||||
'versionData': {
|
||||
'retime': True,
|
||||
'speed': -1.0,
|
||||
'timewarps': [],
|
||||
'handleStart': 10,
|
||||
'handleEnd': 10
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_reverse_speed_24_to_23.976fps.json",
|
||||
expected_data,
|
||||
handle_start=10,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
def test_img_sequence_reverse_speed_0_7():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 1000-1100 24fps
|
||||
source_range = 1040-1081 25fps
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 1040,
|
||||
'mediaOut': 1068,
|
||||
'handleStart': 4,
|
||||
'handleEnd': 4,
|
||||
'speed': -0.7,
|
||||
'versionData': {
|
||||
'retime': True,
|
||||
'speed': -0.7,
|
||||
'timewarps': [],
|
||||
'handleStart': 4,
|
||||
'handleEnd': 4
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_reverse_speed_0_7.json",
|
||||
expected_data,
|
||||
handle_start=5,
|
||||
handle_end=5,
|
||||
)
|
||||
|
||||
|
||||
def test_img_sequence_2x_speed():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 948674-948974 25fps
|
||||
source_range = 948850-948870 23.976fps
|
||||
speed = 2.0
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 948850,
|
||||
'mediaOut': 948871,
|
||||
'handleStart': 20,
|
||||
'handleEnd': 20,
|
||||
'speed': 2.0,
|
||||
'versionData': {
|
||||
'retime': True,
|
||||
'speed': 2.0,
|
||||
'timewarps': [],
|
||||
'handleStart': 20,
|
||||
'handleEnd': 20
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_2x_speed.json",
|
||||
expected_data,
|
||||
handle_start=10,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
def test_img_sequence_2x_speed_resolve():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 0-99 24fps
|
||||
source_range = 38-49 24fps
|
||||
speed = 2.0
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 1040,
|
||||
'mediaOut': 1061,
|
||||
'handleStart': 20,
|
||||
'handleEnd': 20,
|
||||
'speed': 2.0,
|
||||
'versionData': {
|
||||
'retime': True,
|
||||
'speed': 2.0,
|
||||
'timewarps': [],
|
||||
'handleStart': 20,
|
||||
'handleEnd': 20
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_2x_speed_resolve.json",
|
||||
expected_data,
|
||||
handle_start=10,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
def test_img_sequence_frozen_frame():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 948674-948974 25fps
|
||||
source_range = 909990.8339241028
|
||||
- 909995.8339241028 23.976fps
|
||||
speed = 0.0
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 948855,
|
||||
'mediaOut': 948855,
|
||||
'handleStart': 0,
|
||||
'handleEnd': 0,
|
||||
'speed': 0.0,
|
||||
'versionData': {
|
||||
'retime': True,
|
||||
'speed': 0.0,
|
||||
'timewarps': [],
|
||||
'handleStart': 0,
|
||||
'handleEnd': 0,
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_freeze_frame.json",
|
||||
expected_data,
|
||||
handle_start=10,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
def test_img_sequence_timewarp_beyond_range():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 948674-948974 25fps
|
||||
source_range = 909990.8339241028
|
||||
- 909995.8339241028 23.976fps
|
||||
timewarp to get from 948845 to 948870
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 948845,
|
||||
'mediaOut': 948870,
|
||||
'handleStart': 0,
|
||||
'handleEnd': 10,
|
||||
'speed': 1.0,
|
||||
'versionData': {'handleEnd': 10,
|
||||
'handleStart': 0,
|
||||
'retime': True,
|
||||
'speed': 1.0,
|
||||
'timewarps': [
|
||||
{
|
||||
'Class': 'TimeWarp',
|
||||
'length': 1.0,
|
||||
'lookup': [
|
||||
0.0,
|
||||
1.0559999694824223,
|
||||
2.147999965667725,
|
||||
3.3119999771118156,
|
||||
4.583999992370606,
|
||||
6.0,
|
||||
7.583999992370606,
|
||||
9.311999977111817,
|
||||
11.147999965667726,
|
||||
13.055999969482421,
|
||||
15.0
|
||||
],
|
||||
'name': 'TimeWarp3'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_tw_beyond_range.json",
|
||||
expected_data,
|
||||
handle_start=0,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
def test_img_sequence_2X_speed_timewarp():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 948674-948974 25fps
|
||||
source_range = 909990.8339241028
|
||||
- 909995.8339241028 23.976fps
|
||||
speed: 200%
|
||||
timewarp to get from 948854 to 948874
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 948854,
|
||||
'mediaOut': 948874,
|
||||
'handleStart': 0,
|
||||
'handleEnd': 20,
|
||||
'speed': 2.0,
|
||||
'versionData': {
|
||||
'handleEnd': 20,
|
||||
'handleStart': 0,
|
||||
'retime': True,
|
||||
'speed': 2.0,
|
||||
'timewarps': [
|
||||
{
|
||||
'Class': 'TimeWarp',
|
||||
'length': 4.0,
|
||||
'lookup': [
|
||||
0.0,
|
||||
-0.2960000076293945,
|
||||
-0.568000008583069,
|
||||
-0.7920000057220469,
|
||||
-0.944000001907348,
|
||||
-1.0,
|
||||
-0.9439999923706051,
|
||||
-0.791999977111816,
|
||||
-0.5679999656677239,
|
||||
-0.29599996948242335,
|
||||
0.0
|
||||
],
|
||||
'name': 'TimeWarp6'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_2x_time_warp.json",
|
||||
expected_data,
|
||||
handle_start=0,
|
||||
handle_end=10,
|
||||
)
|
||||
|
||||
|
||||
def test_img_sequence_multiple_timewarps():
|
||||
"""
|
||||
Img sequence clip
|
||||
available files = 948674-948974 25fps
|
||||
source_range = 909990.8339241028
|
||||
- 909995.8339241028 23.976fps
|
||||
multiple timewarps to get from 948842 to 948864
|
||||
"""
|
||||
expected_data = {
|
||||
'mediaIn': 948845,
|
||||
'mediaOut': 948867,
|
||||
'handleStart': 0,
|
||||
'handleEnd': 10,
|
||||
'speed': 1.0,
|
||||
'versionData': {
|
||||
'handleEnd': 10,
|
||||
'handleStart': 0,
|
||||
'retime': True,
|
||||
'speed': 1.0,
|
||||
'timewarps': [
|
||||
{
|
||||
'Class': 'TimeWarp',
|
||||
'length': 1.0,
|
||||
'lookup': [
|
||||
0.0,
|
||||
1.0559999694824223,
|
||||
2.147999965667725,
|
||||
3.3119999771118156,
|
||||
4.583999992370606,
|
||||
6.0,
|
||||
7.583999992370606,
|
||||
9.311999977111817,
|
||||
11.147999965667726,
|
||||
13.055999969482421,
|
||||
15.0
|
||||
],
|
||||
'name': 'TimeWarp3'
|
||||
},
|
||||
{
|
||||
'Class': 'TimeWarp',
|
||||
'length': 1.0,
|
||||
'lookup': [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
'name': 'TimeWarp4'
|
||||
},
|
||||
{
|
||||
'Class': 'TimeWarp',
|
||||
'length': 1.0,
|
||||
'lookup': [
|
||||
0.0,
|
||||
-1.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-1.0
|
||||
],
|
||||
'name': 'TimeWarp5'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
_check_expected_retimed_values(
|
||||
"img_seq_multiple_tws.json",
|
||||
expected_data,
|
||||
handle_start=0,
|
||||
handle_end=10,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ from ayon_core.pipeline.traits import (
|
|||
from ayon_core.pipeline.traits.trait import TraitValidationError
|
||||
|
||||
|
||||
|
||||
def test_sequence_validations() -> None:
|
||||
"""Test Sequence trait validation."""
|
||||
file_locations_list = [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue