Bernard Engine · Doc

Scripts et API Python

Bernard peut être automatisé de deux façons :

Les scripts et l'API s'adressent aux TD et aux développeurs de pipeline. Un artiste n'en a pas besoin pour travailler.

Ce que les scripts peuvent faire

Via l'API, un script peut :

Un script agit avec les droits de l'utilisateur connecté. Une écriture refusée par les règles (machine d'états, droits) ne lève pas d'erreur : l'appel rend False. Voir Workflows, états et modèles pour ces règles.

Les tâches script

Une tâche script est une tâche du workflow qui lance une commande. Le script devient ainsi une étape du workflow, avec ses sources, ses suites et ses états.

Ce qu'elle porte :

Propriété Rôle
Command la commande à lancer ; c'est une expression, qui peut lire les propriétés de la tâche, de l'élément, du projet…
Launch On le poste qui exécute le script
Task Priority l'ordre dans la file d'attente (de 1 à 99, la plus haute passe la première)
Log la sortie du script
Files les fichiers de la tâche

Comment elle s'exécute :

  1. Quand la tâche devient Ready (ses sources sont terminées), le Bernard du poste désigné la lance. Il n'y a pas de bouton Run : pour relancer un script, remettez sa tâche en Ready.
  2. Elle passe en WIP et sa sortie (normale et erreurs) s'écrit dans Log. Pendant l'exécution, le Log se met à jour toutes les 5 secondes.
  3. Elle passe en Done si le script se termine avec le code 0, en Failed sinon.

Règles à connaître :

Actions, déclencheurs et événements

L'API Python

Référence

La référence complète, générée à partir du code et tenue à jour à chaque version, est en ligne :

bernardengineapi.readthedocs.io

On y trouve la classe CallBernard (communiquer avec Bernard), des outils pour les chemins et les logiciels tiers (3DEqualizer, Nuke…) et les constantes à utiliser avec l'API. Pour chaque méthode : ce qu'elle fait, ce qu'elle accepte, ce qu'elle renvoie et les erreurs qu'elle signale. L'application ouvre cette référence depuis Help › API Documentation.

Se connecter

L'API parle au client Bernard ouvert sur le même poste, comme un plugin de logiciel de création (voir Intégrations DCC).

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

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

Exemples

Les exemples utilisent des identifiants fictifs.

# Mes tâches à faire, et passer la première en 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("refusé : assignation, checklist, correction active…")
# Publier une nouvelle version d'un fichier et obtenir son chemin sur ce poste
bernard.IncrementVersion(file_id)
print(bernard.GetPathValue(nodeID=file_id))
# Les plans d'une séquence dont une tâche est en cours
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]})
# Ouvrir un fichier dans le lecteur du studio
bernard.OpenInPlayer(nodeID=file_id)

Familles de méthodes

Besoin Méthodes (exemples)
Naviguer dans l'arborescence GetRootID, GetParentID, GetProjectID, GetIdFromBernardPath
Chercher FindNodeIDs, GetMyTasks, HasProperty, HasTags
Lire et écrire des propriétés GetPropertyValue, SetPropertyValue, GetPropertiesValues, SetPropertiesValues
Workflows et tâches GetCurrentTaskIDs, GetItemTasks, CreateWorkflowTasks, ExportWorkflowTasks
Fichiers, chemins et versions GetPathValue, SetPathValue, IncrementVersion, CreateFiles, UpdateFileThumbnail
Copier, déplacer, envoyer, télécharger FileOperation, FileOperationFromPath
Créer et supprimer CreateNode, DeleteNodes, CreateUsers
Instructions et temps passé GetTaskInstructions, SetInstructionChecked, GetTimeLog, SetTimeLog
Utilisateurs et réglages GetCurrentUserID, GetAllUsers, GetSettingsAttributeValue
Applications GetAppPathByExtension, GetAppPathsByExtension
Interface et lecteur OpenInPlayer, BringToForeground, showMSGWindow, PopUpFileDialog

La liste complète et les paramètres sont dans la référence en ligne.

Nouveautés de l'API dans la 2.1.48

Exemples d'automatisation en studio

Ces exemples montrent ce que des studios ont automatisé avec l'API. Ce sont des scripts propres à des studios, pas des fonctions du produit. Ils sont décrits ici sans nom de studio ni de projet, pour illustrer les possibilités.

Besoin Ce que fait le script Lancement
Rapprocher devis, livraisons et production compare un tableau de devis, les métadonnées des fichiers livrés et les données Bernard, montre les écarts, laisse choisir la bonne valeur et corrige action sur un groupe de plans
Ranger une livraison sans saisie trouve la séquence d'images d'un plan, lit ses métadonnées, renseigne le plan, copie les images dans le fichier de plaque en nouvelle version tâche script du plan
Barrière qualité avant validation refuse une livraison incomplète (images manquantes, résolution, couches attendues) en écrivant un rapport dans le Log ; la tâche passe en Failed en cas d'erreur tâche script avant la validation
Rendre et convertir sans ouvrir le logiciel trouve l'application par l'extension du fichier, calcule le chemin par l'expression, range le rendu dans la bonne version tâche script
Construire des workflows par le code décrit un workflow en JSON et l'applique, d'abord « à blanc » pour voir ce qui serait fait ligne de commande
Relier d'autres outils publie une preview vers un outil de suivi tiers, prévient par e-mail quand des personnes ne sont pas arrivées tâche script ou tâche planifiée

Principes que ces exemples illustrent :

Aller plus loin