如何手动创建发布?

问题 1:

我的部分工作流尚未使用 Toolkit,但我想编写一个脚本或一段代码用于在 Shotgun 中创建发布,这样,在此工作流部分中发布的文件就会显示在 Toolkit 加载器和 Shotgun 通知流中,而且我还可以执行依存关系数据挖掘。 

问题 2:

我的磁盘上有许多已发布文件,我想将这些文件注册为 Shotgun 中的正确发布。如何编写一个脚本来执行此操作?

解答:

Toolkit 应用通常负责在 Shotgun 内创建新发布。然后在处理数据或者将其加载到工作流中的下游场景时,会使用这些发布。

创建已发布文件的应用的主要示例是我们的多发布应用,它在所有插件中使用,可以配置为导出各种文件格式和输出。我们的加载器、细分和文件管理器应用都会使用发布填充其用户界面。也可以通过依存关系链接将发布连接到其他发布,使用这种方式,可以很好地跟踪工作流中不同文件彼此之间的关系。

Shotgun 7.2 中,我们对发布应用进行了更新,使其可以独立运行。除了软件包(如 3ds Max、Houdini、Maya、Nuke、Nuke Studio 和 Photoshop)内的工作流外,还可以拖放任意文件进行发布。

如果工作流的某些环节使用 Toolkit 而其他环节未使用,则设置非 Toolkit 工作流以在 Shotgun 中创建发布可能会有所帮助。这意味着加载器和细分应用可以轻松地处理这些文件。您还有权访问 Shotgun 提供的所有事件流和通知服务,使团队中的每个人了解项目的最新进展。

使用 register_publish() API 方法创建发布

虽然可以使用原始 Shotgun API 调用在 Shotgun 中创建发布记录,但是我们强烈建议使用 Toolkit 的便捷方法。创建发布的所有 Toolkit 应用都使用称为 sgtk.util.register_publish() 的 API 实用程序方法。

基本上来说,此方法会在 Shotgun 中创建一个新的 PublishedFile 实体,并尝试使用 Toolkit 概念简化操作过程。您的代码应该与下面类似:

# Get access to the toolkit API
import sgtk

# this is the file we want to publish.
file_to_publish = "/mnt/projects/proj/seq_abc/shot_123/comp/foreground.v034.nk"

# alternatively, for file sequences, we can just use
# a standard sequence token
# file_to_publish = "/mnt/projects/proj/seq_abc/shot_123/comp/renders/v034/foreground.%04d.exr"

# The name for the publish should be the filename
# without any version number or extension
name = "foreground"

# initialize an API object. If you have used the toolkit folder creation
# to create the folders where the publish file resides, you can use this path
# to construct the API object. Alternatively you can create it from any Shotgun
# entity using the sgtk_from_entity() method.
tk = sgtk.sgtk_from_path(file_to_publish)

# use the file to extract the context. The context denotes the current work area in toolkit
# and will control which entity and task the publish will be linked up to. If you have used the toolkit
# folder creation to create the folders where the publish file resides, you can use this path
# to construct the context.
ctx = tk.context_from_path(file_to_publish)

# alternatively, if the file you are trying to publish is not in a location that is
# recognized by toolkit, you could create a context directly from a Shotgun entity instead:
ctx = tk.context_from_entity("Shot", 123)
ctx = tk.context_from_entity("Task", 123)

# Finally, run the publish command.
# the third parameter (file.nk) is typically the file name, without a version number.
# this makes grouping inside of Shotgun easy. The last parameter is the version number.
sgtk.util.register_publish(
tk,
ctx,
file_to_publish,
name,
published_file_type="Nuke Script",
version_number=34
)

请注意,除了如上所示的基本选项外,还有几个其他选项可以填充:

  • 发布名称应该不带任何版本号和扩展名。Toolkit 和 Shotgun 将发布整合为版本“流”时,通常按发布名称和实体链接组合项目。
  • 上述示例中的发布文件类型参数将在发布上设置“Published File Type”属性。这样您就可以对不同类型的内容进行分类。在 Toolkit 应用中以及其他地方,可以通过这种方法来区分不同类型的数据。我们建议提供文件内容的简要说明,而不是复制文件扩展名(这可以单独访问)。示例:Nuke Script、Rendered Sequence、Background Plates、Diffuse Texture Map、Maya Rig、Alembic Geometry
  • 要注册依存关系,请传递 dependency_ids=[123, 456] 参数,其中带有要发布的文件所依赖的所有发布 ID 的列表。例如,如果要发布 Nuke 脚本,则扫描您的 Nuke 场景并查找所有的读取节点,在此特定情况下,这些就是您的依存关系。
  • 或者,如果您没有发布 ID,则可以改为使用 dependency_paths 参数传递路径列表。
  • 要将缩略图与发布相关联,请传递 thumbnail_path 参数。
  • 如果发布与要审核的特定版本关联,则通过 version_entity 参数传入其 ID。
  • 使用 comment 参数添加发布所含内容的简要说明。

有关参数的完整列表,请参见核心 API 文档

编写自定义发布应用

如果要编写自定义发布应用,相关操作会大为简化!在这种情况下,可以通过 self.sgtk 以及来自 self.context 的上下文抓取 Toolkit API 句柄。因此,无需像上面的示例中那样创建它们,系统会为您执行所有相关操作。

使用 Shotgun API 手动创建发布记录

或者,可以只是手动将发布记录直接插入到 Shotgun 中。在这种情况下,请确保包括上述示例中所示的所有基本字段。

关注

0 评论

登录写评论。