diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 39d49070df..606c926a8d 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -177,6 +177,7 @@ def deliver_sequence( format_dict, report_items, log, + renumber_frame=False, frame_offset=0 ): """ For Pype2(mainly - works in 3 too) where representation might not @@ -299,19 +300,34 @@ def deliver_sequence( src = os.path.normpath( os.path.join(dir_path, src_file_name) ) - dsp_index = int(index) + frame_offset - if dsp_index < 0: - msg = "Frame has a smaller number than Frame Offset" - report_items[msg].append(src_file_name) - log.warning("{} <{}>".format(msg, context)) - return report_items, 0 - dst_padding = dst_collection.format("{padding}") % dsp_index - dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) - dst = os.path.normpath( - os.path.join(delivery_folder, dst) - ) - _copy_file(src, dst) + if renumber_frame: + first_index = src_collection.indexes[0] + dsp_index = (int(index) - first_index) + 1 + dst_padding = dst_collection.format("{padding}") % dsp_index + dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) + dst = os.path.normpath( + os.path.join(delivery_folder, dst) + ) + + _copy_file(src, dst) + + else: + dsp_index = int(index) + frame_offset + if dsp_index < 0: + msg = "Frame has a smaller number than Frame Offset" + report_items[msg].append(src_file_name) + log.warning("{} <{}>".format(msg, context)) + return report_items, 0 + + dst_padding = dst_collection.format("{padding}") % dsp_index + dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) + dst = os.path.normpath( + os.path.join(delivery_folder, dst) + ) + + _copy_file(src, dst) + uploaded += 1 return report_items, uploaded diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index 54315ce4f7..68cfb23681 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -1,4 +1,5 @@ import copy +import math from collections import defaultdict from qtpy import QtWidgets, QtCore, QtGui @@ -88,8 +89,10 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): template_label.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor)) template_label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) + renumber_frame = QtWidgets.QCheckBox() + frame_offset_value = QtWidgets.QSpinBox() - frame_offset_value.setMinimum(-99) + frame_offset_value.setMinimum(-(1<<32)//2) root_line_edit = QtWidgets.QLineEdit() @@ -115,6 +118,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): input_layout.addRow("Delivery template", dropdown) input_layout.addRow("Template value", template_label) input_layout.addRow("Frame Offset", frame_offset_value) + input_layout.addRow("Renumber Frame", renumber_frame) input_layout.addRow("Root", root_line_edit) input_layout.addRow("Representations", repre_checkboxes_layout) @@ -143,6 +147,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): self.template_label = template_label self.dropdown = dropdown self.frame_offset_value = frame_offset_value + self.renumber_frame = renumber_frame self.root_line_edit = root_line_edit self.progress_bar = progress_bar self.text_area = text_area @@ -170,6 +175,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): datetime_data = get_datetime_data() template_name = self.dropdown.currentText() format_dict = get_format_dict(self.anatomy, self.root_line_edit.text()) + renumber_frame = self.renumber_frame.isChecked() frame_offset = self.frame_offset_value.value() for repre in self._representations: if repre["name"] not in selected_repres: @@ -223,6 +229,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): if not frame: new_report_items, uploaded = deliver_single_file(*args) else: + args.append(renumber_frame) args.append(frame_offset) new_report_items, uploaded = deliver_sequence(*args) report_items.update(new_report_items)