Bernard Engine · Doc

Scripts y API de Python

Bernard se puede automatizar de dos maneras:

Los scripts y la API están pensados para los TD y los desarrolladores de pipeline. Un artista no los necesita para trabajar.

Lo que pueden hacer los scripts

Mediante la API, un script puede:

Un script actúa con los permisos del usuario conectado. Una escritura rechazada por las reglas (máquina de estados, permisos) no lanza ningún error: la llamada devuelve False. Consulta Workflows, estados y plantillas para estas reglas.

Las tareas script

Una tarea script es una tarea del workflow que lanza un comando. Así, el script se convierte en una etapa del workflow, con sus fuentes, sus continuaciones y sus estados.

Lo que lleva:

Propiedad Función
Command el comando que se lanza; es una expresión, que puede leer las propiedades de la tarea, del elemento, del proyecto…
Launch On el puesto que ejecuta el script
Task Priority el orden en la cola (de 1 a 99, la más alta pasa primero)
Log la salida del script
Files los archivos de la tarea

Cómo se ejecuta:

  1. Cuando la tarea pasa a Ready (sus fuentes están terminadas), el Bernard del puesto designado la lanza. No hay botón Run: para relanzar un script, vuelve a poner su tarea en Ready.
  2. Pasa a WIP y su salida (normal y errores) se escribe en Log. Durante la ejecución, el Log se actualiza cada 5 segundos.
  3. Pasa a Done si el script termina con el código 0, y a Failed en caso contrario.

Reglas que conviene conocer:

Acciones, disparadores y eventos

La API de Python

Referencia

La referencia completa, generada a partir del código y mantenida al día en cada versión, está en línea:

bernardengineapi.readthedocs.io

Encontrarás la clase CallBernard (comunicarse con Bernard), herramientas para las rutas y los programas de terceros (3DEqualizer, Nuke…) y las constantes que se usan con la API. Para cada método: qué hace, qué acepta, qué devuelve y los errores que señala. La aplicación abre esta referencia desde Help › API Documentation.

Conectarse

La API habla con el cliente de Bernard abierto en el mismo puesto, como un plugin de un programa de creación (consulta Integraciones DCC).

from Bernard import CallBernard
from Bernard.Static import State, ClassName

bernard = CallBernard()
print(bernard.GetCurrentUserID())

Ejemplos

Los ejemplos usan identificadores ficticios.

# Mis tareas por hacer, y pasar la primera a WIP
for task_id in bernard.GetMyTasks():
    print(bernard.GetPropertyValue(task_id, "Name"))

task_id = bernard.GetMyTasks()[0]
if not bernard.SetPropertyValue(task_id, "State", State.wip):
    print("rechazado: asignación, checklist, corrección activa…")
# Publicar una nueva versión de un archivo y obtener su ruta en este puesto
bernard.IncrementVersion(file_id)
print(bernard.GetPathValue(nodeID=file_id))
# Los planos de una secuencia que tienen una tarea en curso
shots = bernard.FindNodeIDs(parentIDs=[sequence_id], classNames=[ClassName.projectItem],
                            projectItemModelName="Shot")
wip = bernard.FindNodeIDs(parentIDs=[sequence_id], classNames=[ClassName.task],
                          propertyFilter={"State": [State.wip, State.pause]})
# Abrir un archivo en el reproductor del estudio
bernard.OpenInPlayer(nodeID=file_id)

Familias de métodos

Necesidad Métodos (ejemplos)
Navegar por el árbol GetRootID, GetParentID, GetProjectID, GetIdFromBernardPath
Buscar FindNodeIDs, GetMyTasks, HasProperty, HasTags
Leer y escribir propiedades GetPropertyValue, SetPropertyValue, GetPropertiesValues, SetPropertiesValues
Workflows y tareas GetCurrentTaskIDs, GetItemTasks, CreateWorkflowTasks, ExportWorkflowTasks
Archivos, rutas y versiones GetPathValue, SetPathValue, IncrementVersion, CreateFiles, UpdateFileThumbnail
Copiar, mover, enviar, descargar FileOperation, FileOperationFromPath
Crear y eliminar CreateNode, DeleteNodes, CreateUsers
Instrucciones y tiempo invertido GetTaskInstructions, SetInstructionChecked, GetTimeLog, SetTimeLog
Usuarios y ajustes GetCurrentUserID, GetAllUsers, GetSettingsAttributeValue
Aplicaciones GetAppPathByExtension, GetAppPathsByExtension
Interfaz y reproductor OpenInPlayer, BringToForeground, showMSGWindow, PopUpFileDialog

La lista completa y los parámetros están en la referencia en línea.

Novedades de la API en la 2.1.48

Ejemplos de automatización en estudios

Estos ejemplos muestran lo que algunos estudios han automatizado con la API. Son scripts propios de estudios, no funciones del producto. Se describen aquí sin nombre de estudio ni de proyecto, para ilustrar las posibilidades.

Necesidad Lo que hace el script Lanzamiento
Conciliar presupuestos, entregas y producción compara una tabla de presupuestos, los metadatos de los archivos entregados y los datos de Bernard, muestra las diferencias, te deja elegir el valor correcto y lo corrige acción sobre un grupo de planos
Ordenar una entrega sin teclear encuentra la secuencia de imágenes de un plano, lee sus metadatos, rellena el plano, copia las imágenes en el archivo de plate como nueva versión tarea script del plano
Barrera de calidad antes de la validación rechaza una entrega incompleta (imágenes que faltan, resolución, capas esperadas) escribiendo un informe en el Log; la tarea pasa a Failed si hay error tarea script antes de la validación
Renderizar y convertir sin abrir el programa encuentra la aplicación por la extensión del archivo, calcula la ruta con la expresión, guarda el render en la versión correcta tarea script
Construir workflows con código describe un workflow en JSON y lo aplica, primero « en seco » para ver qué se haría línea de comandos
Conectar otras herramientas publica una preview en una herramienta de seguimiento de terceros, avisa por correo cuando alguien no ha llegado tarea script o tarea programada

Principios que ilustran estos ejemplos:

Ir más lejos